Memahami Kapan Menggunakan lambda
vs Proc.new
dalam Ruby
Saat memprogram dalam Ruby, terutama sebelum versi 1.9, banyak pengembang menghadapi dilema umum: kapan seharusnya saya menggunakan lambda
dan kapan seharusnya saya menggunakan Proc.new
? Meskipun keduanya mungkin terlihat mirip, kedua konstruk ini memiliki perbedaan penting yang dapat memengaruhi perilaku kode Anda, dan memahami nuansa ini sangat penting bagi setiap pengembang Ruby.
Perbedaan Kunci Antara lambda
dan Proc.new
1. Perilaku Pernyataan Return
Salah satu perbedaan paling signifikan terletak pada bagaimana setiap konstruk menangani pernyataan return
. Mari kita uraikan:
-
Return di dalam proc yang dibuat dengan
lambda
:- Ketika Anda memanggil
return
dari dalamlambda
, itu hanya keluar darilambda
itu sendiri. Setelah kembali darilambda
, kontrol kembali ke metode pemanggil, dan eksekusi berlanjut seperti biasa.
- Ketika Anda memanggil
-
Return di dalam proc yang dibuat dengan
Proc.new
:- Sebagai perbandingan, memanggil
return
dariProc.new
tidak hanya keluar dari proc tetapi juga dari metode yang membungkus. Ini dapat menyebabkan perilaku yang tidak terduga dalam kode Anda.
- Sebagai perbandingan, memanggil
Berikut adalah ilustrasi singkat:
Contoh Praktis
Contoh lambda
def whowouldwin
mylambda = lambda { return "Freddy" }
mylambda.call
return "Jason" # Baris ini akan dieksekusi
end
puts whowouldwin # Output: "Jason"
Dalam contoh di atas, lambda
yang dieksekusi mengembalikan “Freddy”, tetapi kontrol kembali ke metode dan mengeksekusi baris berikutnya, mengembalikan “Jason” sebagai gantinya.
Contoh Proc.new
def whowouldwin2
myproc = Proc.new { return "Freddy" }
myproc.call
return "Jason" # Baris ini TIDAK akan dieksekusi
end
puts whowouldwin2 # Output: "Freddy"
Dalam kasus ini, ketika Proc.new
mengeksekusi kembali, kontrol diberikan kembali dari seluruh metode. Oleh karena itu, “Jason” tidak pernah dikembalikan.
2. Fleksibilitas dan Penggunaan
-
Gunakan
lambda
ketika:- Anda menginginkan perilaku yang dapat diprediksi dengan pernyataan
return
. - Anda mengharapkan nilai kembali hanya dikembalikan dari proc itu sendiri dan meneruskan eksekusi metode yang membungkus.
- Anda menginginkan perilaku yang dapat diprediksi dengan pernyataan
-
Gunakan
Proc.new
ketika:- Anda memerlukan perilaku yang lebih fleksibel (dan kadang-kadang berisiko) dengan pernyataan
return
dan perlu proc untuk keluar dari baik proc maupun metode. - Anda lebih suka mengetik lebih sedikit dan sintaks yang lebih sederhana dalam konteks tertentu.
- Anda memerlukan perilaku yang lebih fleksibel (dan kadang-kadang berisiko) dengan pernyataan
Kesimpulan
Memilih antara lambda
dan Proc.new
dalam Ruby dapat secara signifikan memengaruhi alur dan hasil kode Anda. Dalam banyak kasus, terutama ketika kejelasan dan prediktabilitas sangat penting, umumnya disarankan untuk menggunakan lambda
daripada Proc.new
. Namun, memahami konteks di mana masing-masing diterapkan dapat membuat pemrograman Anda lebih efektif dan menyenangkan.
Dengan mengingat perbedaan ini dan menerapkannya secara bijaksana dalam kode Anda, Anda dapat menghindari jebakan umum dan menulis program Ruby yang lebih kokoh.