10 Mart 2013 Pazar

Ruby Programlama - Kontrol Yapıları

if ve unless

Tek satır için basit bir örnek :
yas = 23
puts "Yasiniz yeni yasalara gore alkol almak icin cok kucuk" if yas<24

Multiple satır için basit bir örnek :
yas = 23
if yas < 23
puts "Yasiniz yeni yasalara gore alkol almak icin cok kucuk"
end

“unless” şart ifadesi ise “if”in tam tersidir. Diğer dillerden aşina olabileceğiniz “if not”ın Ruby’de ki karşılığıdır. Kullanımı “if” ile aynı mantıkladır.
yas = 23
puts "Yasiniz yeni yasalara gore alkol almak icin cok kucuk" unless yas > 23

Farklı durumlar için birlikte kullanabiliriz :
yas = 24
puts "Yasiniz yeni yasalara gore alkol almak icin cok kucuk" unless yas > 23
puts "Afiyet bal seker olsun" if yas >= 24

Aynı işlemi “else” ile daha kolayca yaptırabilirdik :
yas = 24
if yas < 23
puts "Yasiniz yeni yasalara gore alkol almak icin cok kucuk"
else
puts "Afiyet bal seker olsun"
end

? ifadesi

Bu ifadeyi kısatma olarak düşünebiliriz. Fakat okuduğum kaynaklar bunun pek kullanılan bir ifade olmadığını yazıyordu, bu yüzden daha public projeler üzerinde çalışacaksak klasik metodlara yakın durmamız iyi olacak gibi duruyor.
yas = 24
x = yas < 30 ? "cocuksun" : "yetiskinsin"
puts "Sen bir " + x

Bu kod parçasının yapacağı iş oldukça açık. Bunu kısaltma olmadan yazmak için bir üstte ki örnekte ki yöntemi kullanmalıydık.

Kullanımı şöyle not edilebilir :

<şart ifadesi> ? <şart doğru ise”> : <şart yanlış ise>

Daha farklı bir örnek :
yas = 24
puts "Sen bir " + (yas < 30 ? "cocuksun" : "yetiskinsin")

Daha klasik bir tarz ile :
yas = 24
x = "cocuksun" if yas < 30
x = "yetiskinsin" unless yas < 30
puts "Sen bir " + x

elsif

Burada yazarken “elsif” yerine “elif” yazarsam bilin ki Python’dan gelen bir alışkanlıktır, siz onu düzelterek “elsif” yapın.

Keşke bir standart olsa değil mi? “elseif”, “else if”, “elif”, “elsif”… Hangi dilde, hangi ifadeydi, devamlı karışmazdı.

Burada uzun uzun, if-elsif-else mantığına değinmeyeceğim, bunu harici bir kaynaktan okuyup öğrenebilirsiniz. Bütün diller için bu mantık hemen hemen aynıdır. “Programlama dillerine giriş” ders kaynaklarında veya beginner seviye herhangi bir programlama kitabında detaylı bilgiler bulabilirsiniz.

if için çoklu şartlı ifade :
browser = "firefox"
isletimsistemi = "ubuntu"
hata = "tarayicinizda bir sorun var" if browser == "internet explorer"
hata = "işletim sisteminizde bir sorun var" if isletimsistemi == "windows"
hata = "sisteminiz uyumlu" if browser == "firefox" && isletimsistemi == "ubuntu"
puts hata

* Bir kontrol bloğu içerisinde (end ile bitene dek) birçok “elsif” ifadesini ardarda kullanabilirsiniz, ancak sadece 1 tane if ve else kullanabilirsiniz.

Örneğin şu kod çalışmayacaktır :
browser = "internet explorer"
isletimsistemi = "windows"
if browser == "internet explorer"
puts "hata 1"
if isletimsistemi == "windows"
puts "hata 2"
end

Çünkü 2 tane “if” kullandık ancak kontrol bloğunda tek bir tane “end” var. Çalışması için 1 tane daha end girerek, 2.kontrol bloğunu oluşturmuş olmalıyız.
browser = "internet explorer"
isletimsistemi = "windows"
if browser == "internet explorer"
puts "hata 1"
end
if isletimsistemi == "windows"
puts "hata 2"
end

Sonuc :

hata 1
hata 2

* elsif ve else durumları yalnızca “if” ile belirttiğimiz şartın yanlış dönmesi durumunda çalışırlar.

Yukarıda ki örneği elsif ile yapsaydık :
browser = "internet explorer"
isletimsistemi = "windows"
if browser == "internet explorer"
puts "hata 1"
elsif isletimsistemi == "windows"
puts "hata 2"
end

Alacağımız sonuç yalnızca “hata 1″ olacaktı.

case

“case” şartlı ifadesi daha anlaşılır ve okunaklı bir kod yazabilmek için oldukça kullanışlı. Temel olarak durumları kontrol eder, eşleşen varsa onun taşıdığı işlemi yapar, eşleşme yoksa “else”e geçerek orada ki kodu işletir.
isletimsistemi = "ubuntu"
case isletimsistemi
when "windows"
puts "onu da severiz"
when "windows mobile"
puts "ooo zenginiz demek"
when "ubuntu"
puts "open source"
else
puts "bilemedik beyim"
end

Başka bir örnek :
yas = 28
case
when yas < 24
puts "Yasiniz #{yas} ve 24 yasiniza tam #{24-yas} yil var"
when yas == 24
puts "Yasiniz #{yas}. Rahat rahat alkol alabilirsiniz"
when yas > 24
puts "Yasiniz #{yas} ve #{yas-24} yildir rahat rahat icebiliyorsunuz"
end

“when” yapılarını tek satırda işletmek :
yas = 28
case
when yas < 24 then puts "Yasiniz #{yas} ve 24 yasiniza tam #{24-yas} yil var"
when yas == 24 then puts "Yasiniz #{yas}. Rahat rahat alkol alabilirsiniz"
when yas > 24 then puts "Yasiniz #{yas} ve #{yas-24} yildir rahat rahat icebiliyorsunuz"
end

“then” kullanmadan :
yas = 28
case
when yas < 24 : puts "Yasiniz #{yas} ve 24 yasiniza tam #{24-yas} yil var"
when yas == 24 : puts "Yasiniz #{yas}. Rahat rahat alkol alabilirsiniz"
when yas > 24 : puts "Yasiniz #{yas} ve #{yas-24} yildir rahat rahat icebiliyorsunuz"
end

while ve until

“while” ve “until” ile loop (döngü) işlemleri yapabiliriz.
yas = 28
while yas < 40
puts yas
end

Bu bir sonsuz döngü örneğidir. Program boyunca “yas” değeri “28″ olacağından devamlı olarak, ekrana “28″ yazdırılacaktır.

Bunu sonlu bir döngü haline getirelim, harhangi bir şekilde :
yas = 28
while yas < 40
puts yas += 2
end

until, İngilizce’de ki anlamıyla, Ruby’de kullanılır.
yas = 28
until yas > 100
puts yas
yas *= 1.2
end

Bu örnek, “yas” değişkeni 100 değerine ulaşana kadar, onu 1.2 ile çarparak ekrana yazdırır.

Yazı : Mustafa Serhat Dündar'a Aittir.