İçeriğe atla

Ruby/Söz Dizimi/Değişkenler ve Sabitler

Vikikitap, özgür kütüphane

←Leksikoloji | Değer İfadeleri→

Rubydeki bir değişken isminin başlangıcındaki karakterlerle ayırt edilebilir. Değişkenin isim uzunluğu konusunda bir sınırlama yoktur. (yığın boyutunu saymazsak).


Özet

[düzenle]

İlk karakter kapsamı bildirir:

  • Yerel değişkenler — küçük harf ya da alt çizgi
  • Oluşumdeğişkenleri — @
    • Sınıf kapsamında oluşum değişkenleri o sınıftan üretilen nesneye aittir
    • Sınıfa ait nesneler üzerinde örnek değişkenleri tanımlamak için, initialize() içinde @ kullanın
  • Sınıf değişkenleri — @@
  • Global değişkenler — $
  • Sabitler — büyük harf

Sınıf yapılarında değişken kapsamları için ilave bilgi Ruby/Söz Dizimi/Sınıflar sayfasında.


Yerel Değişkenler

[düzenle]

Örnek:

 falanfilan
 _falanfilan

İsmi küçük harf (a-z) ya da altçizgi (_) ile başlayan bir değişken, bir yerel değişken ya da metod çağrısıdır.

Bir yerel değişkene sadece tanımlandığı blok içinde erişilebilir. Örneğin:

i0 = 1
loop {
  i1 = 2
  puts defined?(i0)	# true; "i0" bir dış blokta tanımlandı
  puts defined?(i1)	# true; "i1" bu blokta tanımlandı
  break
}
puts defined?(i0)	# true; "i0 bu blokta tanımlandı
puts defined?(i1)	# false; "i1" başka bir iç blokta tanımlandı


Oluşum Değişkenleri

[düzenle]

Örnek:

 @foobar

Bir değişkenin adı @ karakteri ile başlıyorsa içinde bulunduğu sınıfın oluşum değişkenidir, yani o sınıftan üretilen her nesne için bu değiken ayrı ayrı geçerlidir. Bir oluşum değişkeni nesnenin kendisine aittir. Başlatılmamış oluşum değişkenlerinin değerleri nil olur.


Sınıf Değişkenleri

[düzenle]

Bir sınıf değişkeni, o sınıftan üretilen tüm oluşum nesnelerinde paylaşılan tek bir değişkendir ve "@@" karakterleri ile başlar. Örnek:

 @@falan


Bir önemli nokta sınıf değişkeni o sınıfın tüm torunlarında da paylaşılır. Örnek:

class Parent
    @@foo = "Parent"
end
class Thing1 < Parent
    @@foo = "Thing1"
end
class Thing2 < Parent
    @@foo = "Thing2"
    @@bar = "bar"
end
puts Parent.class_eval("@@foo")
   # =>"Thing2"
puts Thing1.class_eval("@@foo")
   # =>"Thing2"
puts Thing2.class_eval("@@foo")
   # =>"Thing2"
puts Thing2.class_variables.to_s 
   # =>[:@@bar, :@@foo]
puts Parent.class_variables.to_s 
   # =>[:@@foo]

Bu gösteriyor kii bizim bütün sınıf tanımlamaları aynı değişkenin değerini değiştiriyor. Sınıf değişkenleri kalıtım ağacı kapsamında global değişkenmiş gibi davranıyor. Ruby değişkenleri ilk önce kalıtım ağacına bakarak değerlendirdiği için, eğer iki altsınıf aynı isimde sınıf değişkenleri tanımlarsa (eklerse) sıkıntı olabilir.


Küresel Değişkenler

[düzenle]

Örnek:

 $falanca

İsmi '$' ile başlayan her değişkenin küresel kapsamı vardır; yani değişkene, program çalıştırılırken her yerden erişilebilir.


Sabitler

[düzenle]

Kullanım:

 FALAN

İsmi büyük harfle (A-Z) başlayan tanımlar sabitlerdir. Bir sabit başladıktan sonra tekrar değer atanabilir, fakat öyle yapmak hata üretecektir.

Değer atanmamış bir sabite erişmeye çalışmak NameError (İsimHatası) hatası oluşturur.


Sabitlere nasıl erişilir

[düzenle]

Sabitlere erişirken ya bulunduğunuz kapsamda tanımlılara erişirsiniz ya da kapsam ifade (scope resolution) operatörü (örn. '::') kullanırsınız. Örneğin:

 class A
     A2 = 'a2'
     class B
         def go
             A2 
         end
     end
 end
 instance_of_b = A::B.new
 a2 = A::A2

Burada şu da görülüyor, B sınıfna da sabite erişir gibi erişiyoruz. Bir diğer örnek:

class Foo
   BAR = 123
end
puts Foo::BAR   
# => 123


Sahte Değişkenler

[düzenle]

self

Bulunulan metodun çalıştığı kapsam, metodun olduğu yere göre nesneyi, sınıfı ya da modülü gösterir.

nil

NilClass sınıfının yegane oluşum nesnesi. Hiçbir şeyliği ifade eder.

true

TrueClass sınıfının yegane oluşum nesnesi. true değerini ifade eder.

false

FalseClass sınıfının yegane oluşum nesnesi. false değerini ifade eder.

$1, $2 ... $9

Bunlar regexp eşleşme gruplarının içeriğini saklarlar. Bulunulan thread ve yığın çerçevesinde yerel değişkenlerdir

(nil koşullarda kullanılırken false olarak kabul edilir, nil olmayan tüm değerler true kabul edilir, Ruby'de böyle). Bir sahte değişkenin değeri değiştirilemez.


Ön-Tanımlı Değişkenler

[düzenle]

Ruby interpreter parametreleri ve regexp değerler ile çalışırken kullanılabilecek kullanışlı ön-tanımlı değişkenler vardır.

İsim Taknma Ad Açıklama
$! $ERROR_INFO [1] En son 'raise ile verilen sıradışı durumun (exception) bilgi mesajı.
$@ $ERROR_POSITION[1] Son yayınlanan sıradışı durumun geri izleme array'i.
$& $MATCH[1] Bu kapsam içinde son eşleşen regexp paterni değeri.
$` $PREMATCH[1] Son başarılı eşleşmenin öncesinde kalan string değeri.
$' $POSTMATCH[1] Son başarılı eşleşmenin arkasında kalan string değeri.
$+ $LAST_PAREN_MATCH[1] Regexp parantez içinde verilen grupların son eşleşeni.
$1 to $9 Regexp grupların ilk eşleşeni, ikincisi vs.
$~ $LAST_MATCH_INFO[1] Son eşleşme hakkında bilgi.
$= $IGNORECASE[1] Bu versiyon 1.9 sonrası kaldırıldı, string karşılaştırmalarında bu değer 'true' iken küçük harfe çevriliyordu.
$/ $INPUT_RECORD_SEPARATOR[1], $RS[1] veya $-0 gets gibi metodların girdi okurken algıladığı 'bitti' işareti , defaultu '\n'.
$\ $OUTPUT_RECORD_SEPARATOR[1] veya $ORS[1] print ve IO#write çıktıyı yazarken argümanında verilen değerler arasına bunu koyar. Default değeri 'nil'.
$, $OUTPUT_FIELD_SEPARATOR[1] veya $OFS[1] print ve Array#join metodları kullanılırken çıktıda alanlar arasına yazılacak ayırıcı.
$; $FIELD_SEPARATOR[1], $FS[1] veya $-F String#split metodunun default ayırıcısı, değeri boşluk karakteridir.
$. $INPUT_LINE_NUMBER[1] veya $NR[1] Bir dosyadan okuma yapılırken bulunulan satır numarası.
$< $DEFAULT_INPUT[1] Komut satırı argümanlarının listesi (ARGF nesnesi ile aynı değer). Sadece okunur.
$FILENAME Komut satırında parametre olarak verilen dosya adı. $<.filename ile aynıdır.
$> $DEFAULT_OUTPUT[1] print ve printf işlemi için varsayılan çıktıdır. Varsayılan değeri de $stdout
$_ $LAST_READ_LINE[1] gets veya readline ile alınan son satırdır, veri tipi String'dir.
$0 Çalıştırılan betiğin dosya adıdır.
$* ARGV[1] Komut satırı işlemlerinde, dosyaya geçilen argümanların saklandığı değişkendir.
$$ $PROCESS_ID[1], $PID[1] veya Process.pid Çalıştırılan betiğin işlem numarası (Process ID)
$? $CHILD_STATUS[1] Çalıştırılan son alt işlemin (Child Process) durumu.
$: $LOAD_PATH Modüller ve ek dosyalar için Path (_Load Path__) bilgisi. 'require' komutunun bakacağı yerler listesi mesela.
$" $LOADED_FEATURES or $-I require ile yüklenen dosyaların adlarının tutulduğu dizi (Array)
$stderr Bulunulan Giriş/Çıkış hata bildirimi yeri.
$stdin Bulunulan Standart giriş yeri.
$stdout Bulunulan Standart çıktı yeri.
$-d $DEBUG -d swiçinin durumu ("ruby -d file.rb" gibi). Değiştirilebilir.
$-K $KCODE Kaynak kodun karakter kodlaması.
$-v $VERBOSE -v swiçiyle set edilen verbose flag değeri.
$-a Eğer -a ("autosplit" mod) opsiyonu varsa true olur. Sadece okunabilir.
$-i in-place-edit modda extension'ı saklar. Aksi durmda nil.
$-l Eğer -l opsiyonu set edilmişse true olur ("line-ending processing" is on). Sadece okunur.
$-p '-p' opsiyonu (loop with printing) set edildiyse true olur. Sadece okunur.
$-w '-w' opsiyonu setliyse true olur (orta seviye uyarılar, default true).

Bu kısa isimlerin hem gizemli hem zor olmasından dolayı , standart kütüphane English'te bulunan uzun isimleri de tabloda gösterdik. Bu isimleri kullanmak için "English" kütüphanesini aşağıdaki gibi kodunuza dahil ediniz.[1]

‘English’ olmadan:

$\ = ' -- '
"waterbuffalo" =~ /buff/
print $", $', $$, "\n"

English ile:

require "English"
    
$OUTPUT_FIELD_SEPARATOR = ' -- '
"waterbuffalo" =~ /buff/
print $LOADED_FEATURES, $POSTMATCH, $PID, "\n"


Ön-Tanımlı Sabitler

[düzenle]

Ayrıştırma zamanında önceden tanımlanmış bazı sabitlerin de olduğunu unutmayın, bunlar şunlardır:

 __FILE__   (bulunulan dosya adı)
 __LINE__   (bulunulan satır numarası)

ve

 __dir__    (bulunulan klasör)
 __method__ (bulunulan metod)

(new in Ruby 2.0)

Ruby dili dökümantasyonunda bir list of predefined global constants bulunabilir [2] Öne çıkanlar:

Global sabit adı Açıklama
STDIN Standart girdi ID. $stdin için default değer.
STDOUT Standart çıktı ID. $stdout için default değer.
STDERR Standart hata çıktı ID. $stderr için default değer.
ENV Aktif çevre değişkenlerinin (Environment Variables) bulunduğu Hash.
ARGV Komut satırında girilen opsiyonları içeren array.
RUBY_VERSION Ruby versiyon numarası, örn., ruby -e 'puts RUBY_VERSION' 2.7.0 benzeri versiyon yazar.
RUBY_RELEASE_DATE Versiyon çıkış tarihi, örn., 2019-12-25.
RUBY_PLATFORM Platform bilgisi, örn., x86_64-linux-gnu
RUBY_PATCHLEVEL Ruby versiyonunun patch numarası, örn., 247. Eğer bu bir development build ise patch numarası -1 olur.


Notlar

[düzenle]
  1. 1,00 1,01 1,02 1,03 1,04 1,05 1,06 1,07 1,08 1,09 1,10 1,11 1,12 1,13 1,14 1,15 1,16 1,17 1,18 1,19 1,20 1,21 1,22 1,23 1,24 1,25 English.rb from the Standard Library Documentation
  2. Resmi Ruby dökümanında pre-defined global variables and constants bölümü
Önceki: Söz Dizimi/Leksikoloji Index Sonraki: Söz Dizimi/Değer İfadeleri