JAL 2.3. Kayıtlar (Records)

JAL - Veri türleri kayıtlar

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...

comments powered by Disqus