Ruby/Kontrol Yapıları
Kontrol Yapıları
değiştirKoşullu Dallanmalar
değiştirRuby program akışını koşullu dallanmalar kullanarak kontrol edebilir. Bir koşullu dallanma , bir karşılaştırmanın sonucunu alır ve sonucun doğru ya da yanlış olmasına göre bir blok program çalıştırır. Eğer karşılaştırma eşitliğinin sonucu false
veya nil
ise yanlış sonucun bloğu çalışır geri kalan tüm olasılıklar doğru sonuç olarak değerlendirilir. Yani sıfır
değeri bile doğru olarak değerlendirilir. Diğer programlama dilllerinde sıfır yanlış sonuç olarak değerlendirilir.
Birçok programlama dilinde koşullu dallanmalar deyimlerdir ve hangi kodun işleneceğini karar verirler. Ama kendileri bir değer dönmezler. Ruby'de koşullu dallanmalar aynı zamanda işlemdirler. Diğer işlemler gibi değerleri işlerler. Örneğin if
işlemi sadece koda karar vermez aynı zamanda bir değer döner. Mesela aşağıdaki if
işlemi 3 değerini geri döner:
if true 3 end
Ruby'nin koşullu dallanmaları aşağıda açıklanmıştır.
if işlemi
değiştirÖrnekler:
a = 5 if a == 4 a = 7 end print a # if bloğu işletilmediği için 5 yazacaktır
Ayrıca eğer then
kullanırsanız if işlemcisi ve kod bloğunu aynı satıra yazabilirsiniz:
if a == 4 then a = 7 end #ya da if a == 4: a = 7 end
Bu şu şekilde de ifade edilir:
a = 5 a = 7 if a == 4 print a # if bloğu işletilmediği için 5 yazacaktır
unless işlemi
değiştirUnless işlemi if işleminin tersidir, eğer yapılan karşılaştırmanın sonucu yanlış ise kod bloğu işletilir.
Örnekler:
a = 5 unless a == 4 a = 7 end print a # unless bloğu işletildiği için 7 yazacaktır
unless işlemi hemen hemen tam anlamıyla if işleminin tersi olarak çalışır:
if !işlem # unless işlem ile aynı
Farkı, if işlemi elsif ile karşılaştırmanın yanlış çıkmasıyla ikinci bir karşılaştırma yapar ama unless işleminin elsunless gibi bir devamı yoktur.
Ayrıca aynı if işlemindeki gibi :
a = 5 a = 7 unless a == 4 print a # unless bloğu işletildiği için 7 yazacaktır
Çalıştırılacak kod bloğu tek satır olduğunda tek satırlık şekil daha yakışıklı olacaktır.
if-elsif-else işlemi
değiştirelsif (dikkat edin elsif
yazılır elseif
değil) ve else blokları sayesinde birbiriyle alakalı birçok test yaparak programınızı daha etkili kontrol edebilirsiniz. elsif
ve else
blokları sadece if
karşılaştırması yanlış ise işlenir. Birçok elsif
bloğu olabilir ama sadece bir if
ve bir else
olabilir.
Yazım:
if işlem ...kod bloğu... elsif başka işlem ...kod bloğu... elsif başka işlem ...kod bloğu... else ...kod bloğu... end
kısa-if işlemi
değiştir"kısa-if" işlemi bir karşılaştırma sonucunda değerler dönmek için kestirme yoldur. String birleştirmelerinde koşullu işler yapmak için idealdir.
Örnek:
a = 5 plus_or_minus = '+' print "#{a}#{plus_or_minus}1 işlemi sonucu: " + (plus_or_minus == '+' ? (a+1).to_s : (a-1).to_s) + "."
Bu [? (expr) : (expr)] şeklindeki yapıya aynı zamanda ternary (üçlü grup) işlem de denir. Bu sadece string düzenleme gibi basit işlerde kullanılır çünkü okuması biraz karışıktır.
irb(main):037:0> true ? 't' : 'f' => "t" irb(main):038:0> false ? 't' : 'f' => "f"
case işlemi
değiştirYukarıda açıklanan if-elsif-else işlemlerinin bir başka alternatifi olarak case işlemi kullanılır. Ruby'de case işlemi çoklu işlemi destekler. Örneğin bir sayı ile 5 arasındaki ilişkiyi tayin etmek istiyoruz :
a = 1 case when a < 5 then puts "#{a}, 5 ten küçüktür" when a == 5 then puts "#{a}, 5 e eşittir" when a > 5 then puts "#{a}, 5 ten büyüktür" end
Not olarak eşitliği test ederken == kullanılır. Atama yapmak için = kullanılır. Şu durumda Ruby atama yapacaktır:
when a = 5 then puts "#{a}, 5 e eşittir" # DİKKAT! Bu kod a değerini değiştirir!
Bu bizim istediğimiz değil! Biz burda karşılaştırma yapmak istiyoruz.
Bir diğer eşlenik deyim de "then" yerine ":" kullanmaktır:
when a < 5 then puts "#{a}, 5 ten küçüktür"
when a < 5 : puts "#{a}, 5 ten küçüktür"
Daha kestirme bir yol olarak case ile karşılaştırma yapılacak değişkeni baştan verebiliriz:
case a when 0..4 then puts "#{a}, 5 ten küçüktür" when 5 then puts "#{a}, 5 e eşittir" when 5..10 then puts "#{a}, 5 ten büyüktür" else puts "istenmeyen değer #{a} " # a 10 dan büyük ya da negatif end
Note: Range'ler açıkça sabit olduğu için a'nın istenmeyen değerlerini sınırlamak için kullanılır. Bu kestirme yol olası değerler bilindiğinde çok faydalı olacaktır. Örneğin :
a = "elma" puts case a when "vanilya" then "bir baharat" when "ıspanak" then "bir sebze" when "elma" then "bir meyve" else "beklenmeyen değer" end
Bu satırları irb'de girerseniz :
bir meyve =>nil
Case hakkında diğer bilgileri Linuxtopia Ruby Programming [1] adresinde bulabilirsiniz.
Döngüler
değiştirwhile
değiştirRuby'de while
ifadesi kullanım olarak if
ve diğer dillerdeki while
ifadesine benzer:
while < işlem > <...kod bloğu...> end
Kod bloğu işlem sonucu true
olduğu sürece tekrar tekrar işlenecektir.
Ayrıca aynı if
ve unless
ifadelerinde olduğu gibi, şöyle de mümkündür:
<...kod...> while < işlem >
Aşağıdaki ilginç kodu inceleyin...
line = readline.chomp while line != "bunu arıyordum"
Bu satır çalıştırılınca konsoldan girilen satırları alır ve "bunu arıyordum" yazısı girilene kadar döngü bitmez.
until
değiştiruntil
ifadesi işleyiş olarak while
ifadesine benzer. while
ifadesinin tersine until
kullanılınca kod bloğu işlemin sonucu false
olduğu sürece işlenir.
until < işlem > <...kod bloğu...> end
Anahtar Kelime
değiştirreturn
değiştir return değer
satırı içinde bulunduğu metodun değer ile geri dönmesini sağlar.