lambda
ve Proc.new
Kullanımını Anlamak
Ruby programlama dilinde, özellikle 1.9 sürümünden önce, birçok geliştirici yaygın bir ikilemle karşı karşıya kalır: Terminlerini kullanırken lambda
mı yoksa Proc.new
mı kullanmalıyım? Görünüşte benzer olsalar da, bu iki yapı, kodunuzun davranışını etkileyebilecek önemli farklara sahiptir ve bu nüansları anlamak herhangi bir Ruby programcısı için kritik öneme sahiptir.
lambda
ve Proc.new
Arasındaki Temel Farklar
1. Return İfadelerinin Davranışı
En önemli farklardan biri, her yapının return
ifadelerini nasıl ele aldığıdır. Bunu inceleyelim:
-
lambda
ile oluşturulan yerleşkeninreturn
ifadesi:lambda
içindereturn
çağırdığınızda, sadecelambda
içinden çıkılır.lambda
‘dan döndükten sonra, kontrol çağıran metoda geri döner ve yürütme normal şekilde devam eder.
-
Proc.new
ile oluşturulan yerleşkeninreturn
ifadesi:- Buna kıyasla,
Proc.new
içindereturn
çağırdığınızda, hem yerleşkeden hem de çevreleyen metottan çıkılır. Bu durum, kodunuzda beklenmeyen davranışlara yol açabilir.
- Buna kıyasla,
İşte hızlı bir örnek:
Pratik Örnekler
lambda
Örneği
def whowouldwin
mylambda = lambda { return "Freddy" }
mylambda.call
return "Jason" # Bu satır yürütülecek
end
puts whowouldwin # Çıktı: "Jason"
Yukarıdaki örnekte, lambda
“Freddy” döndürür, ancak kontrol metoduna geri döner ve sonraki satırı yürütür, böylece “Jason” döndürülür.
Proc.new
Örneği
def whowouldwin2
myproc = Proc.new { return "Freddy" }
myproc.call
return "Jason" # Bu satır YÜRÜTÜLMEYECEK
end
puts whowouldwin2 # Çıktı: "Freddy"
Bu durumda, Proc.new
return ifadesini yürüttüğünde, kontrol tüm metottan geri döner. Bu nedenle, “Jason” asla döndürülmez.
2. Esneklik ve Kullanım
-
lambda
kullanın:return
ifadesinde öngörülebilir davranış istediğinizde.- Dönüş değerinin yalnızca yerleşkeden döndürülmesini ve çevreleyen metodun yürütmeye devam etmesini beklediğinizde.
-
Proc.new
kullanın:return
ifadesi ile daha esnek (ve bazen riskli) bir davranışa ihtiyaç duyduğunuzda ve yerleşkenin hem yerleşkeden hem de metottan çıkmasını istiyorsanız.- Belirli bağlamlarda daha az yazım ve daha basit sözdizimi tercih ediyorsanız.
Sonuç
Ruby’de lambda
ile Proc.new
arasında seçim yapmak, kodunuzun akışını ve sonucunu önemli ölçüde etkileyebilir. Çoğu durumda, özellikle netlik ve öngörülebilirlik önemliyse, genellikle Proc.new
yerine lambda
kullanmanız önerilir. Ancak, her birinin hangi bağlamlarda geçerli olduğunu anlamak, programlamanızı daha etkili ve keyifli hale getirebilir.
Bu farklılıkları aklınızda tutarak ve kodunuzda bunları yerinde uygulayarak, yaygın tuzaklardan kaçınabilir ve daha sağlam Ruby programları yazabilirsiniz.