“CODE BLOCK” yapılı iÅ?levler oluÅ?turmak
Ã?nceki makalemizde “yapılar ve tekrarlayıcılar”ın genel kullanım türlerinden bahsetmiÅ?tik. Ã?rnek verirken Ruby tarafından bize sunulan kütüphaneleri ele almıÅ?tık. (Array.each gibi)
Bu makalede yapı kabul eden fonksiyonları kendimizin nasıl oluÅ?turacaÄ?ı üzerinde duracaÄ?ız.
Kendi oluÅ?turduÄ?umuz fonksiyona nasıl “kod yapıları” eklenebilir?
Kod yapısı kabul eden bir fonksiyon oluÅ?turmak için Ruby dili bize “yield” iÅ?levini sunar. Verilen kodun tekrarlanacaÄ?ı yere “yield” yazmak yeterlidir.
puts "Ã?alıÅ?tırılıyor..."
# kod yapısını çalıÅ?tıralım
yield
puts "Bitti..."
end
calistir { puts "merhaba" }
Yukarıda belirtilen fonksiyon “yield” iÅ?levinde verilen kod yapısını tekrar edecektir. Ã?ncesinde ekrana “Ã?alıÅ?tırılıyor…” yazacak yapılan kod tekrarlandıÄ?ında “Bitti” yazacaktır.
block_given?
calistir fonksiyonuna herhangi bir yapı göndermeden kullanmaya çalıÅ?ırsak hata oluÅ?acaktır. Yapı gönderilip gönderilmediÄ?ini “block_given?” fonksiyonu ile öÄ?renebiliriz.
if block_given?
puts "Ã?alıÅ?tırılıyor..."
yield
puts "Bitti..."
else
puts "calistir\nKullanım: calistir YAPI"
end
end
DeÄ?er Döndüren Yapılar
Array.each fonksiyonunda gördüÄ?ümüz ( array.each { |x| …. } ) gibi deÄ?er döndüren yapıları oluÅ?turmak için parametleri yield fonksiyonuna argüman olarak verebiliriz.
puts "ilk kez çalıÅ?tırılıyor"
# 1 deÄ?erini döndürüyoruz
yield(1)
puts "ikinci kez çalıÅ?tırılıyor"
# iki deÄ?erini döndürüyoruz
yield(2)
end
# iki kere çalıÅ?acak fonksiyon
ikikere_calistir { |x| puts "#{x}. çalıÅ?tırma" }
yield iÅ?levine verilen argümanları yapı içerisinde “sırayla” deÄ?iÅ?kenlere atayabiliriz.
Argüman olarak “Code Block” Gönderilmesi
Kod yapılarını bir deÄ?iÅ?ken gibi fonksiyonlara deÄ?er olarak gönderebiliriz. Böylelikle onu alıp iÅ?leyebilir, diÄ?er fonksiyonlara gönderebiliriz.
Bu tür alınan yapılar deÄ?iÅ?ken sınıfı olarak “Proc” Å?eklinde gelirler. Normal bir deÄ?iÅ?kenden ayrıldıklarını ise & iÅ?areti ile belli ederiz.
puts "Ã?alıÅ?tırılıyor..."
islev.call
puts "Bitti..."
end
# Yapının verilip vermediÄ?ini deÄ?iÅ?kenleri kontrol eder gibi (Nil sınıfına mı ait?) denetleyebiliriz.
def calistir(&islev)
if islev
islev.call
else
puts "hata! yapı verilmemiÅ?..."
end
end
Fonksiyonlara argüman olarak gönderilen yapılar fonksiyonların son deÄ?iÅ?keni olmak zorundadır.
Kod yapıları Ruby programlama dilinde sık kullanılan özelliklerden biridir. Kendinize ait sınıf tanımlarında, verisel olaylarda bu tür yapıların kullanılması hem daha anlaÅ?ılır bir programa hem de daha geniÅ?letilebilir programlara imkan tanır.






