Ruby’de bir değişken, adının başındaki karakterler ile ayırt edilebilir. Değişken adı belirlerken karakter sınırlaması yoktur. 4 adet değişken türü mevcuttur. Bu değişken türleri şunlardır;
* Yerel Değişkenler (Local Variables)
* Durum Değişkenleri (Instance Variables)
* Sınıf Değişkenleri ( Class Variables)
* Global Değişkenler ( Global Variables)
ve bu değişken türlerine ek olarak bir de Sabitler (Constants) tipi veriler mevcut.
1) Yerel Değişkenler: İsimler verilirken küçük harfler ile başlanan veri türleridir. Bir yerel değişken sadece tanımlandığı blok içerisinde erişilir haldedir ve blok dışına çıkıldığında değişkenin de kullanım alanı dışına çıkmış oluruz. Bu sebepten yerel bir değişkeni blok dışında kullandığımız da Ruby tarafından bir hata mesajı ile uyarılmış oluruz. Örnek olarak ;
sayi = 23;
kelime = “elma”
2) Durum Değişkenleri: Bu değişkenlere isim verilirken “@” karakteri ile başlanır. Durum değişkenleri bir nesnenin bizzat kendisine aittir. Tanımlanmamış durum değişkenleri öntanımlı olarak nil değerine sahiptir. Örnek olarak;
@ogrenci
3) Sınıf Değişkenleri: Sınıf değişkenleri bir sınıfın bütün durumları tarafından paylaşılır ve @@ karakteri ile isimlendirilmeye başlanır. Örnek olarak;
@@sınıf_mevcudu
*** Önemli bir duruma değinecek olursak; Sınıf değişkenleri tanımlandığı sınıftan miras alma yoluyla oluşturulan bütün çocuk sınıflar ile de paylaşılabilir.
class Ata @@sinif_tipi = "Ata" end class Cocuk < Ata @@sinif_tipi = "Cocuk1" end class Cocuk2 < Ata @@sinif_tipi = "Cocuk2" end puts Ata.class_eval("@@sinif_tipi") #=> "Cocuk2" puts Cocuk1.class_eval("@@sinif_tipi") #=> "Cocuk2" puts Cocuk2.class_eval("@@sinif_tipi") #=> "Cocuk2"
Görüldüğü üzere Ata sınıfında tanımlanan, @@sınıf_tipi sınıf değişkenini Ata sınıfından miras alarak olusturulan Cocuk1 ve Cocuk2 sınıflarında da kullanabildik ve hatta mevcut değerini değiştirdik. Sınıf değişkenlerinin, sadece bir kalıtım ağacında görünür olan global değişkenler gibi davranış gösterdiğini de keşfetmiş olduk.
4) Global Değişkenler: Global değişkenler programın çalışma anında her yerden erişilebilen değişkenlerdir ve isim verilirken $ karakteri ile başlanılır.
$sayici , $renk, $boy.. vs. gibi örnekler verilebilir.
SABİTLER (CONSTANTS)
Sabitler isimlendirilirken büyük harfle başlanılır. Örnek olarak bir sabit tanımlayacak olursak şu şekilde olacaktır; Ogrenciler
Bir sabitin değeri tanımlanmasından sonra değiştirilebilir, ancak Ruby bu konuda bize bir uyarı verecektir. Ruby de tanımladığımız her sınıf da ayrıca bir sabittir.
Tanımlanmamış bir sabite erişmeye çalışmak NameError istisnasına sebep olacaktır.
–> Peki Sabitlere Nasıl Erişebiliriz?
class A A2 = 'a2' class B def go A2 end end end b_nin_durumu = A::B.new a2 = A::A2 puts b_nin_durumu.go puts a2
Yukardaki örnek kaynak kodumuz bize çıktı olarak;
#=> a2
#=> a2
gibi bir sonuç verecektir.
Sahte Sabitler (Pseudo Constants)
+ self : Bir durum, sınıf ya da modülü referans gösteren, mevcut metodun içeriğinin çalıştırılması
+ nil : NilClass sınıfının gösterimi, hiçbir şeyi temsil eder.
+ true : TrueClass sınıfının gösterimi , doğruyu temsil eder.
+ false : FalseClass sınıfının gösterimi, yanlışı temsil eder.