Adım Adım Ruby - 2 -
Eğer kendi kendinize birşey öğreniyorsanız ve birşeyler öğrenirken sıkılıyorsanız bunun sebebi kesinlikle bilinmeyenin göz korkutmasıdır. Yani kitaplar şimdi bunu yapıyoruz şunu kullanacağız. Bir sürü bilinmeyen bir sürü soru işareti ve sonunda oluşan kocaman bir korku ortaya çıkar. Eğer sabır da göstermezsek sonunda pes edip öğrenilen şeyden vazgeçeriz. Bu sebeple yeni birşey öğrenirken geneline bir bakış atmak. Ne neymiş, neden kullanılırmış anlamak isterim. İşte bu sebeple bu yazıda ruby’i ruby yapan şeylerden ve genel özelliklerinden söz edeceğim. Bunların hızlıca üzerinden geçeceğim ama verdiğim bilgiler referans niteliğinde olacak. İleride bu konuda örnekler verdiğimde kodu anlamanıza büyük kolaylık sağlayacak.
Ruby’i Seçmeniz İçin Birkaç Neden?
- Ruby tamamen nesne yönelimli bir programlama dilidir.
- Operatörleri yeniden yazmanıza izin verir.
- Bir sınıfın kaynağına dokunmadan bir metodu yeniden yazmanıza izin verir.
- İşinizi kolaylaştıracak birçok operatöre sahiptir.
- Eğer C biliyorsanız yeni kütüphaneler yazarak dili genişletebilirsiniz.
- Blok mimarisi sayesinde bir metoda bir kod işlemi aktarabilir ve birçok şeyi tek satırda yapabilirsiniz.
- Betik dilidir. Yapılan değişiklikleri anında siteye yansıtır. Java gibi jar dosyaları ile boğuşmazsınız.
- String ve RegEx sınıfları sayesinde hızlı hareket etmenizi sağlar. Programcının menfaatine iş yapar ve çevir bir dildir.
- Platform bağımsızdır. Birçok platformda yazılan kodunuz çalışır.
- Dinamik değişken tanımlama.
- Birçok dilden miraslar aldığı için yazılımcının alışkanlıklarına göre kod yazım esnekliği.
- Yorumlanan bir dildir.
Genel Yazım Kuralları
- Yorum Satırları# karakteri, bulunduğu satırı, satır sonuna(EOL) kadar yorum satırına dönüştürür.Yorumlayıcı bu satırı görmezden gelir.’=begin’ ve ‘=end’ arasında kalan satırları yorumlayıcı görmezden gelir.
- Deyim SonlandırmaDeyim sonlandırma işlemi ya satır sonu ya da eğer aynı satırda birkaç deyim kullanılacaksa (;) (noktalı virgül) işaretidir.
- Sınıf ve Modül tanımları büyük harfle başlamalıdır. (Ör: REXML::Element)
- Değişken tanımları küçük harfle olmalıdır. Değişkenler ilk tanımlamada değer almalıdır. Tek başına yazılamaz. (Ör: foo = 2)
- Method tanımları küçük harfle başlar. (Ör: Math:cos(x))
- Sabitlerin tamamı büyük harf olmalıdır. (Ör:Math:PI)
Reserve Kelimeler
alias and BEGIN begin break case class def defined
do else elsif END end ensure false for if
fin module next nil not or redo rescue retry
return self super then true undef unless until when
while yield
Veri Tipleri
- Sayı(numbers)
- String
- Aralık(ranges)
- RegEx
- Sembol(symbol)
- Diziler(arrays)
- Sözlükler(hashes)
- Prosedur (proc)
Sayılar
- Bignum (1234567890)
- Fixnum (1234)
- Float (1234.56)
- Hex (0xFFFF)
- Binary (0b0101010)
- Octal (0377)
- ?a ASCII karakterinin sayısal degeri
- ?\C-a Control-a karakterinin sayısal degeri
- ?\M-a Meta-a karakterinin sayısal degeri
- ?\M-\C-a Meta-Control-a karakterinin sayısal degeri
String
%() ile baslayan karakterleri asagidakiler string karakteridir. %[], %!!, %@@, vb. ‘araya deger girilemez’ “#{degisken}, ve backslash karakter alir\n” %q(araya deger girilmez) %Q(araya deger ve backslash karakteri alir) %(araya deger ve backslash karakteri alir) echo komut satırı ara deger ve backslash karakterleri alir.
=> ls
denemek ister misiniz? %x(echo komut satırı ara deger ve backslash karakterleri alir.) Backslash \t (tab), \n (newline), \r (carriage return), \f (form feed), \b (backspace), \a (bell), \e (escape), \s (whitespace), \nnn (octal), \xnn (hexadecimal), \cx (control x), \C-x (control x), \M-x (meta x), \M-\C-x (meta control x)
Semboller
Sozluk(hash) ifadelerinde kullanmak icin idealdir. C’de enum’a benzer fakat deger almazlar.(Bazi ozel sembol tanımlama tipleri alır) Asagida orneklerle açıklamaya çalıştım. :sembol => :sembol :’#{“ara”} deger almaz’ => :"#{“ara”} deger almaz" :"#{“ara”} deger" => :“ara deger” %s(#{“ara”} deger almaz) => :"#{“ara”} deger almaz"
Aralıklar
1..10 => 1’den 10’a kadar (10 dahil) 1…10 => 1’den 10’a kadar (10 haric) ‘a’..‘z’ ‘a’…‘z’ (1..10) === 5 => dogru (1..10) === 10 => dogru (1…10) === 10 => yanlis (1..10) === 15 => yanlis
Diziler
[1, 2, 3] %w(foo bar baz) %W(foo bar baz #{var}) Dizilerde index degerleri negatif deger alabilir. Bu dizinin orjinini sondan baslatir.
Sözlükler (Hashes)
{‘bir’=>1, ‘iki’=>2, ‘uc’=>3} { expr => expr…}
Değişkenler ve Sabitler
4 tip değişken etki alanı vardır. Değişkenin isminin başına gelen özel işaretlerle ve etki alanına göre yorumlayıcı tarafından anlaşılır. 1) Global değişkenler Tanım: $global_variable = 0 Uygulama boyunca yaşarlar. Özellikle ön tanımlı global değişkenler ile kullanılır. Hepsi ($) işareti ile başlar. 2) Sınıf Değişkenleri Tanım: @@class_variable = 0 Sınıf her yeni yaratılan örnekte bu değişkenin değeri yeni nesneye aktarılır. Singleton kalıbında kullanılabilir. Bir örnekle açıklayalım;
class Boom
@@class_counter = 0
def initialize
@instance_counter = 0
end
def explode
@@class_counter += 1
@instance_counter += 1
puts "@@class_counter => #{@@class_counter}"
puts "@instance_counter => #{@instance_counter}"
end
end
d1 = Boom.new
d1.explode()
d1.explode()
d2 = Boom.new
d2.explode()
Örnekleme(instance) Değişkenleri
Yerel Değişkenler