Ruby/Söz Dizimi/Değişkenler ve Sabitler
←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.
|