Sadece Ruby'deki for in loop hakkında belirli bir noktaya değinmek istiyorum. Diğer dillere benzer bir yapı gibi görünebilir, ancak aslında Ruby'deki diğer tüm döngü yapıları gibi bir ifadedir. Aslında, for, her yineleyici gibi Numaralandırılabilir nesnelerle çalışır.
For için iletilen koleksiyon, her bir yineleyici yöntemine sahip herhangi bir nesne olabilir. Diziler ve karmalar her yöntemi tanımlar ve diğer birçok Ruby nesnesi de bunu yapar. For / in döngüsü belirtilen nesnenin her yöntemini çağırır. Yineleyici değer verdiğinden, for döngüsü her bir değeri (veya her bir değer kümesini) belirtilen değişkene (veya değişkenlere) atar ve daha sonra kodu gövdede yürütür.
Bu aptalca bir örnektir, ancak for in loop'un her bir yönteme sahip HERHANGİ bir nesne ile çalıştığı noktayı gösterir, tıpkı her yineleyicinin yaptığı gibi:
class Apple
TYPES = %w(red green yellow)
def each
yield TYPES.pop until TYPES.empty?
end
end
a = Apple.new
for i in a do
puts i
end
yellow
green
red
=> nil
Ve şimdi her bir yineleyici:
a = Apple.new
a.each do |i|
puts i
end
yellow
green
red
=> nil
Gördüğünüz gibi, her ikisi de bloğa değer veren her yönteme yanıt veriyor. Buradaki herkesin belirttiği gibi, her bir yineleyiciyi for-in döngüsü üzerinden kullanmak kesinlikle tercih edilir. Ben sadece for in loop hakkında büyülü bir şey olmadığı noktaya götürmek istedim. Bir koleksiyonun her yöntemini çağıran ve daha sonra kod bloğuna ileten bir ifadedir. Bu nedenle, içinde kullanmanız gereken çok nadir bir durumdur. Her yineleyiciyi neredeyse her zaman kullanın (blok kapsamının ek yararı ile).