Üç kapsam: global, member, local
TROIA'da bir değişkenin kapsamı (scope), o tanımın geçerli olduğu alanı belirler. Üç seviye vardır:
- Global: transaction (uygulama) sınırları içinde her yerden erişilebilir — en geniş kapsam.
- Member: sınıfın tüm metotlarından erişilebilir; sınıf dışından
@operatörü olmadan erişilemez. - Local: yalnızca tanımlandığı metot/event içinde geçerlidir; TROIA'da blok seviyesinde (if/loop içi) daha dar bir kapsam tanımlamak mümkün değildir.
Member bir değişken, aynı isimli global değişkeni; local bir değişken de aynı isimli member/global değişkeni kendi kapsamında geçersiz kılar (override eder).
GLOBAL, MEMBER, LOCAL komutları
Üç komutun söz dizimi birebir aynıdır, sadece kapsamı belirler. Tek komutla birden fazla (farklı tipte) değişken tanımlanabilir:
GLOBAL:
STRING STRINGVAR1,
STRING STRINGVAR2,
TABLE TABLEVAR1,
INTEGER INTVAR;
MEMBER komutu yalnızca sınıf metotlarında (constructor dahil) kullanılabilir; dialog ya da report içinde kullanmak hataya sebep olur.
OBJECT komutu: kapsam otomatik belirlenir
OBJECT en eski ve en çok kullanılan tanım komutudur; kapsamı, değişkenin veri tipine ve tanımlandığı metot türüne göre otomatik belirlenir. TABLE ve sınıf örnekleri her zaman global olur. STRING/INTEGER gibi basit tipler ise: dialog/report metodunda global, class constructor'da (_CONSTRUCTOR/_VARIABLES) member, sıradan bir class metodunda ise local olarak tanımlanır.
/* bir dialog metodu içinde çalıştırılırsa STRINGVAR1 global olur */
OBJECT:
STRING STRINGVAR1;
Okunabilirlik açısından GLOBAL/MEMBER/LOCAL kullanmak, OBJECT'e göre önerilir — ama mevcut TROIA uygulamalarının çoğunda hâlâ OBJECT kullanıldığını bilmekte fayda var.
Tanımsız değişkenler ve aynı değişkeni tekrar tanımlamak
TROIA'da tanımsız bir değişken kullanmak derleme hatası vermez; değişken, kendi ismini string gibi bir değer olarak döndürür (ama gerçek bir STRING değildir).
Aynı değişken birden fazla kez tanımlanırsa, ikinci tanım komutu görmezden gelinir — döngü içinde tekrar eden bir tanım komutu ise her seferinde değişkeni varsayılan değerine sıfırlar.
Sonuç
OBJECT kısayoldur ama kapsamı gizler. Bir değişkenin nereden erişilebildiğini net görmek istiyorsanız GLOBAL, MEMBER ve LOCAL komutlarını tercih edin — özellikle büyüyen bir dialog ya da sınıfta hangi değişkenin nereden geldiğini takip etmek çok daha kolay olur.
Yorumlar (0)
Yorum Yaz