1. KOD YAPILARI
Kod yapıları aslen bir fonksiyon olup, -kısaca- iÅ?lemden döndürülen sonuçları alarak bunları o an içerisinde iÅ?lemeye yarar. Bir fonksiyondan ayrıldıkları tek nokta çoÄ?u zaman isimlerinin olmayıÅ?ıdır. Ayrıca fonksiyona deÄ?er göndermek yerine dönen deÄ?eri/deÄ?erleri otomatik olarak yakalayıp, iÅ?leyebilir.
2. KOD YAPILARININ TANIMLANMASI
Ã?rnek olarak “Array” sınıfının “each” fonksiyonunda dönen deÄ?eri yakalayıp bu deÄ?er üzerinden iÅ?lem yapalım.
[1, 2, 3].each { |x| puts "DeÄ?er: #{x}" }
# Do-End Tarzı Yazım
[1, 2, 3].each do
|x| puts "DeÄ?er: #{x}"
end
Ã?rnekte verilen “Array.each” incelendiÄ?inde döngü içerisinde tüm elemanları sırayla aktarıldıÄ?ı görülecektir. Yapı ile biz bu elemanı yakalayıp, onun üzerinden iÅ?lem yaptık.
Ã?rneÄ?i yapı kullanmadan yazmaya çalıÅ?alım:
puts "DeÄ?er: #{x}"
end
for x in [2,4,6]
islem(x)
end
EÄ?er “block” kullanmasaydık buna benzer bir kod yazmak zorunda kalacaktık. YaptıÄ?ı iÅ? tüm elemanlar için “islem” fonksiyonun çaÄ?ırmak, fakat kod uzunluÄ?u olarak “each” kullanarak (each’in “code block” kullandıÄ?ı unutmayalım) 1 satırda yapılabilen bir iÅ?lem 5-6 satıra çıkabiliyor.
Ã?rneÄ?i biraz daha deÄ?iÅ?ik biçimde yazalım:
[1, 2, 3].each { |x| islem.call(x) }
Yukarıdaki örnekte “islem” isimli bir deÄ?iÅ?ken tanımladık ve deÄ?iÅ?ken bir
“code block”tan oluÅ?tu. Bunu yapısal olarak çaÄ?ırdık (call)
Burada bulunan “lambda” Kernel modülü üzerinde bulunan fonksiyon olup yaptıÄ?ı iÅ? yalnızca verilen yapıyı geri döndürmektir.
Bir yapı tanımlamak için lambda, proc, Proc.new Å?eklinde 3 seçeneÄ?inimiz vardır. Bunlardan lambda ve proc aynı olup, Proc.new Å?eklinde tanımlanan bir yapıdan farkı argümanları kontrol etmesidir - aynı bir fonksiyon gibi! -
# sebebi "islem" için iki argüman belirtilmiÅ?ken
# üç argüman göndermesidir
# verilen hata fonksiyonlarda da karÅ?ılaÅ?ılan "ArgumentError" hatasıdır!
islemx = lambda { |x,y| puts x+y }
{"a" => 1, "b" => 2, "c" => 3}.each { |a, b| islem.call(a,b,8) }
# aÅ?aÄ?ıdaki kodlar argüman hatası olmasına raÄ?men
# herhangi bir hata vermeyecektir
islem2 = Proc.new { |x,y| puts x+y }
{"a" => 1, "b" => 2, "c" => 3}.each { |a, b| islem.call(a,b,8) }
Serinin ikinci bölümünde “block” kullanan bir fonksiyonu kendimiz nasıl oluÅ?turabilirize deÄ?inecek, örnek kullanım yerlerini inceleyeceÄ?iz inÅ?allah.






