JAL 2.3. Kayıtlar (Records)

Kayıtlar (Records); diziler, değişkenler, ve kayıtlar da dahil olmak üzere diğer yerleşik
türleri de içinde barındırabilen ve bu farklı veri alanlarını bir paket haline getiren özel
türlerdir. JAL dilinin bu özel türü C dilinde yine özel bir tür olan struct
ile benzerlik
gösterir. Bir kaydın nasıl tanımlandığına bakalım:
1record "tanımlayıcı" is
2 "tür1" "tanımlayıcı1"
3 ...
4end record
Bir kayıt oluşturulduktan sonra, basit bir türün kullanıldığı herhangi bir yerde kullanılabilir. Kaydın dahili alanlarına (.) işleci kullanılarak erişilir.
Konuyu pekiştirmek için bir örnek yapalım; 20 baytlık bir veri kuyruğu tamponu, bu tamponun okuma ve yazma sayaçlarının tutulduğu bir kayıt türü oluşturmak istediğimizi varsayalım. Bunun için şöyle bir tanımlama yapmamız gerekir:
1record kuyruk is
2 byte tampon[20]
3 byte okuma --Okuma adresi tutucusu
4 byte yazma --Yazma adresi tutucusu
5end record
Bu kaydın alanlarına istenirse kayıt tanımlandığı sırada, istenirse de kayıt tanımlandıktan sonra değer atanabilir.
Tanımlama sırasında değer atama
1var kuyruk kuyruk_1 = {0,0,0}
Üstteki kayıt tanımlama biçimine dikkat ettiyseniz; tıpkı yeni bir değişkenin tanımlandığı gibi tanımlanıyor. Burada kuyruk
kaydı, kuyruk_1
tanımının belirleyici türü oluyor. Tanımlama
esnasında tampon
, okuma
ve yazma
alanları sıfır değerlerini alıyor.
Tanımladıktan sonra kayıt alanlarına erişerek değer atama ve sonrasında birkaç kullanım örneği
1var kuyruk kuyruk_1
2
3kuyruk_1.okuma = 0 --Sayaçları sıfırla
4kuyruk_1.yazma = 0
5
6kuyruk_1.tampon[kuyruk_1.yazma] = 100 --tampon[0] = 100
7kuyruk_1.yazma = kuyruk_1.yazma + 1 --Yazma sayacını 1 artır
8kuyruk_1.tampon[kuyruk_1.yazma] = 200 --tampon[1] = 200
9kuyruk_1.yazma = kuyruk_1.yazma + 1 --bir sonraki yazma tampon adresi
10
11var byte okunan_veri
12okunan_veri = kuyruk_1.tampon[kuyruk1.okuma] --tampon[0] okundu
13kuyruk_1.okuma = kuyruk_1.okuma + 1 --bir sonraki okuma tampon adresi
Hatta işleri biraz daha karmaşık hale getirip bir kayıt dizisi tanımlayabiliriz:
1var kuyruk kuyruklar[5] --5 adet 20 baytlık herbirinin kendi okuma ve yazma sayaçları olan kuyruk dizisi tanımlandı
2kuyruklar[0].tampon[kuyruklar[0].yazma] = 18
3kuyruklar[0].yazma = kuyruklar[0].yazma + 1
4
5kuyruklar[1].tampon[kuyruklar[1].yazma] = 54
6kuyruklar[1].yazma = kuyruklar[1].yazma + 1
7
8kuyruklar[2].tampon[kuyruklar[2].yazma] = 237
9kuyruklar[2].yazma = kuyruklar[2].yazma + 1
JAL'ın yapabildikleri bunlarla da sınırlı değil! JAL ayrıca iç içe kayıtları da destekliyor.
Bu sayede size yalnızca nasıl bir kayıt ağı oluşturacağınızı hayal etmek düşüyor. Bir örnek de
iç içe kayıtla yapalım. Bu örnekte, önceki örnekte oluşturduğumuz kuyruk
kaydını kullanacağız:
1record LCD_kuyruk is
2 kuyruk kuyrukLCD
3 byte LCD_komut
4 byte LCD_veri
5end record
6
7var LCD_kuyruk LCD1
8LCD1.LCD_veri = "A"
9LCD1.kuyrukLCD.tampon[LCD1.kuyrukLCD.yazma] = LCD1.LCD_veri
10LCD1.kuyrukLCD.yazma = LCD1.kuyrukLCD.yazma + 1
Kafanızda -'Bu kayıt türü nasıl bir uygulamada kullanılabilir ki?'- diye bir soru oluşabilir. İşin
gerçeği böyle bir soruya yanıt vermek zor. Çünkü olasılıklar ve ihtiyaçlar geniş bir yelpazeye sahip.
Dolayısıyla bu yapıyı nerelede kullanacağınız tamamiyle sizin hayal gücünüze ve programlama
birikimlerinize bağlı. Hiç aklınızda bir şey oluşmuyorsa bunu garipsemeyin, zira programlama
dünyasında oldukça yeni olabilirsiniz. Nitekim yukarıda verilen bir veri yapısı olan kuyruk örneği
ve LCD_kuyruk
, kayıt türünün nasıl ve ne biçimde kullanılabileceği ile ilgili küçük de olsa fikir
verecektir. Hadi sizler de boş durmayın ve bir kayıt türü oluşturmayı deneyin. Belki de bir sensör
uygulaması yapabilir ve sensör özelliklerini içeren bir kayıt oluşturabilirsiniz...