Skip to content

Conditional Statements (Koşullar)

Verilen ifadenin doğru ya da yanlış olduğunun testi yapılır, akış true ya da false durumuna göre seyreder.

if durumu

if a == b then dediğimizde, Eğer "a, b'ye eşittir" önermesi doğruysa demiş oluruz.

if a != b then dediğimizde, Eğer "a, b'ye eşit değildir" önermesi doğruysa demiş oluruz.

Aynı mantıkta, a > b ("a, b'den büyüktür"), a < b ("a, b'den küçüktür"), a >= b ("a, b'en büyük ya da eşittir"), a <= b ("a, b'den küçük ya da eşitse") şeklinde önermeler de kurulabilir.

Negatiflik Operatörü

! işareti önermenin sol tarafında kullanılırsa, negatiflik ya da olumsuzluk kontrolü olduğu anlamındadır.

if !a == b then puts "a, b'ye eşit değil" end ya da if !a > b then puts "a, b'den büyük değil" end gibi kullanılır. İçerideki önermenin tersi doğruysa demektir.

if !a == b then örneğini daha iyi inceleyecek olursak. Örnekte önerme "a, b'ye eşittir" önermesinin olumsuzu, yani "a, b'ye eşit değildir"dir. Yani bu if durumu şuna karşılık gelmektedir: "a, b'ye eşit değildir" doğru ise

Çoklu Kontrol

Eğer önermeler arasında and (ve), or (veya) ya da bunların kısa yollarını (and için &&, or için ||) kullanırsak birden fazla şeyi kontrol etmiş oluruz.

a = 5
b = 10
if a == 5 && b == 10
  puts "İşleme devam edebiliriz!"
end

if a == 5 && b == 10 yerine if a == 5 and b == 10 de yazabilirdik.

Ruby'nin konuşma diline yakın olması sebebiyle, çok daha anlaşılır kontrol satırları yazmak mümkün. Örneğin, Eğer, a, 5'e eşitse Merhaba Yaz demek için ilk akla gelen yöntem:

if a == 5
  puts "Merhaba"
end

ama bunu çok daha basit hale getirebiliriz:

puts "Merhaba" if a == 5 Tek satırda, ifi koşul sonucunda olacak şeyin sağına yazmak yeterlidir.

elsif

Programlama mantığında pek de sevmediğim (daha düzgün yöntemleri var) ama bazen mecbur kaldığımız bir durumdur.

if a == b
  puts "a, b'ye eşit"
elsif a < b
  puts "a, b'den küçük"
else
  puts "a, b'ten büyük"
end

İlk olarak a == b kontrolü yapılır, eğer sonuç false ise, a < b kontrol edilir, o da false ise en sondaki else devreye giriyor ve çıktı olarak "a, b'ten büyük" yazdırılıyor.

unless

Bu, aslında ifin tersi gibi. Daha doğrusu if not anlamında. Eğer a, b'ye eşit değilse demek için;

unless a == b
  puts "Eşit değil"
end

Aynı mantıkta puts "Eşit değil" unless a == b şeklinde de yazabiliriz. Semantik olarak olumsuzluk kontrolü yaparken unless kullanılması önerilir. Kodu okuma ve anlama açısından kolay olması için.

while, break, until Döngüleri

Tanımlanan önerme true olduğu sürece loop yani döngü çalıştırma kontrolüdür.

i = 0
while i < 5 do
  puts "i = #{i}"
  i += 1
end

Eğer i += 1 yani iyi bir arttır, demezsek sonsuz döngüye gireriz. Eğer belli bir anda döngüyü kırmak istersek,

i = 0
while i < 5 do
  puts "i = #{i}"
  break if i == 3
  i += 1
end

i 3 olduğunda loop devre dışı kalır...

Aynı unless mantığında, until kullanılır loop'larda.

i = 0
until i == 10 do
  puts "i = #{i}"
  i += 1
end

Yani i 10'a eşit olmadığı sürece bu loop çalışır.

case, when Yapısı

elsif yerine kullanılması muhtemel, daha anlaşılır kontrol mekanizmasıdır. Hemen örneğe bakalım:

computer = "c64"
year = case computer
  when "c64" then "1982"
  when "c16" then "1984"
  when "amiga" then "1985"
  else
    "Tarih bilinmiyor"
end

puts "#{computer} çıkış yılı #{year}"

# c64 çıkış yılı 1982

Yukarıdaki kodu bir ton if, elsif ile yapmak yerine, when ve then ile daha anlaşılır hale getirdiğimizi düşünüyorum.

when kullanırken range (aralık) belirmesi de yapma şansı var.

student_grade = 8
case student_grade
when 0
  puts "Çok kötü"
when 1..4
  puts "Başarısız"
when 5..7
  puts "İyi"
when 8..9
  puts "Çok İyi"
when 10
  puts "Süper"
end

Eğer not 1 ile 4 aralığındaysa (ve dahil ise) ya da 5 ile 7 aralığındaysa gibi bir kontrol ekledik.

for Döngüsü

1'den 10'a kadar (1 ve 10 dahil) bir döngü yapalım:

for i in 1..10
  puts "i = #{i}"
end

# i = 1
# i = 2
# i = 3
# i = 4
# i = 5
# i = 6
# i = 7
# i = 8
# i = 9
# i = 10

Aynı işi çok daha kolay yapmanın yolunu 5.Bölüm'de Iteration kısmında göreceğiz!

Ternary Operatörü

Kısaltılmış if yapısıdır. Hemen hemen pek çok dilde kullanılan, Eğer şu doğru ise bu değilse bu ifadesi için kullanılır.

amount = 2
pluralize = amount == 1 ? "apple" : "apples"
puts "#{amount} #{pluralize}."

Bu örnekte Ternary olarak amount == 1 ? "apple" : "apples" kullanılmış, eğer amount 1 ise "apple" dönecek, değil ise "apples" dönecek. Yani pluralize değişkenine kontrolden dönen atanıyor.

BEGIN ve END

Ruby'de ilginç bir özellik de, kodun çalışmasından önceye ve sonraya bir ek takabiliyoruz.

Aşağıdaki örnekte BEGIN block'undaki kodlar program başladığında, END block'undaki kodlar program bitmeden hemen önce çalışacaktır.

BEGIN { puts "Kodun başlama saati #{Time.now.to_s}" }
END { puts "Kodun bitme saati #{Time.now.to_s}" }

def say_hello(username)
  "Merhaba #{username}"
end

puts say_hello "Uğur"
sleep 5  # zaman farkı için 5 saniye bekle

# Kodun başlama saati 2014-08-04 09:30:24 +0300
# Merhaba Uğur
# Kodun bitme saati 2014-08-04 09:30:29 +0300