Saya hanya ingin membuat poin spesifik tentang for in loop di Ruby. Ini mungkin tampak seperti sebuah konstruksi yang mirip dengan bahasa lain, tetapi sebenarnya itu adalah ekspresi seperti setiap konstruksi perulangan lainnya di Ruby. Bahkan, untuk dalam bekerja dengan objek Enumerable seperti setiap iterator.
Koleksi yang diteruskan ke dalam dapat berupa objek apa pun yang memiliki metode setiap iterator. Array dan hash mendefinisikan masing-masing metode, dan banyak objek Ruby lainnya juga. Loop for / in memanggil masing-masing metode objek yang ditentukan. Ketika iterator menghasilkan nilai, loop for memberikan setiap nilai (atau setiap set nilai) ke variabel yang ditentukan (atau variabel) dan kemudian mengeksekusi kode dalam tubuh.
Ini adalah contoh konyol, tetapi menggambarkan titik bahwa for in loop bekerja dengan objek APA PUN yang memiliki masing-masing metode, seperti halnya setiap iterator:
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
Dan sekarang setiap iterator:
a = Apple.new
a.each do |i|
puts i
end
yellow
green
red
=> nil
Seperti yang Anda lihat, keduanya merespons setiap metode yang menghasilkan nilai kembali ke blok. Seperti yang dinyatakan oleh semua orang di sini, sudah pasti lebih baik menggunakan iterator masing-masing daripada untuk di dalam loop. Saya hanya ingin pulang ke titik bahwa tidak ada yang ajaib tentang untuk dalam lingkaran. Ini adalah ekspresi yang memanggil setiap metode koleksi dan kemudian meneruskannya ke blok kode. Oleh karena itu, ini adalah kasus yang sangat jarang Anda harus gunakan untuk masuk. Gunakan iterator masing-masing hampir selalu (dengan manfaat tambahan dari ruang lingkup blok).