Örnek Değişkenler
Önceki
İçindekiler
İçindekiler
Sınıf sabitleri
Sonraki

 Ruby Kullanıcı KılavuzuYerel Değişkenler 

Yerel değişkenler küçük harfle ya da _ karakteriyle başlayan isimlere sahiptirler. Yerel değişkenler globallerde ya da örnek değişkenlerde olduğu gibi, başlangıçta nil değerine sahip değildirler.

ruby> $foo
   nil
ruby> @foo
   nil
ruby> foo
ERR: (eval):1: undefined local variable or method `foo' for main(Object)

Yerel bir değişkene yaptığınız ilk atama onu tanımlamakla aynı şeydir. Eğer başlangıç değeri olmayan bir yerel değişkene başvurursanız, Ruby yorumlayıcısı bunun bir metodu çalıştırma girişimi olduğunu düşünür ve aşağıdaki gibi bir hata verir.

Genelde yerel bir değişkenin kapsamı aşağıdakilerden biridir:

Aşağıdaki örnekte görülen defined? operatörü bir tanıtıcının tanımlanıp tanımlanmadığını kontrol eder. Eğer tanımlanmışsa bir açıklama döndürür; tanımlanmamış ise nil değerini döndürür. Gördüğünüz gibi bar döngüde yerel, döngüden çıkınca tanımsızdır.

ruby> foo = 44; print foo, "\n"; defined? foo
44
   "local-variable"
ruby> loop{bar=45; print bar, "\n"; break}; defined? bar
45
   nil

Aynı alandaki prosedür nesneleri her ne varsa yine aynı alandaki yerel değişkenlerle paylaşır. Örnekte yerel değişken bar, main ve prosedür nesneleri p1 ve p2 tarafından paylaşılır:

ruby> bar=0
   0
ruby> p1 = proc{|n| bar=n}
   #<Proc:0x8deb0>
ruby> p2 = proc{bar}
   #<Proc:0x8dce8>
ruby> p1.call(5)
   5
ruby> bar
   5
ruby> p2.call
   5

Baştaki "bar=0"'ın çıkarılamayacağına dikkat edin; bu atama bar'ın p1 ve p2 tarafından kuşatılacağını garanti eder. Öteki türlü, p1 ve p2 kendi yerel bar değişkenlerini sonlandırır ve p2'yi çağırmak "undefined local variable or method" hatasına neden olabilir.

Prosedürlerin argüman olarak geçilebilmesinin yanında başka bir güçlü özellikleri de paylaşılan yerel değişkenlerin eğer geçildilerse hala geçerli kalmalarıdır.

ruby> def box
    |   İçindekiler = 15
    |   get = proc{İçindekiler}
    |   set = proc{|n| İçindekiler = n}
    |   return get, set
    | end
   nil
ruby> reader, writer = box
   [#<Proc:0x40170fc0>, #<Proc:0x40170fac>] 
ruby> reader.call
   15
ruby> writer.call(2)
   2
ruby> reader.call
   2

Ruby kapsam (scope) konusunda bir parça akıllıca davranır. Örneğimizde contents değişkeninin reader ve writer tarafından paylaşılıyordu. Aynı zamanda yukarıda tanımladığımız kutumuzdan birden çok reader-writer çiftleri oluşturabilir ve her çiftin aynı sabiti paylaşmasını sağlayabiliriz.

ruby> reader_1, writer_1 = box
   [#<Proc:0x40172820>, #<Proc:0x4017280c>]
ruby> reader_2, writer_2 = box
   [#<Proc:0x40172668>, #<Proc:0x40172654>]
ruby> writer_1.call(99)
   99
ruby> reader_1.call
   99
ruby> reader_2.call
   15


Örnek Değişkenler
Önceki
İçindekiler
İçindekiler
Sınıf sabitleri
Sonraki