Eski (ve "cevaplandı") sorusu, ama cevap olarak iki sentime atılacağım.
TL; DR - Zorunda değilsiniz, ancak bazı durumlarda kodunuzu çok daha net hale getirebilir.
Açık bir dönüş kullanmamak "Ruby yolu" olsa da, tanıdık kodla çalışan veya Ruby'nin bu özelliğine aşina olmayan programcılar için kafa karıştırıcıdır.
Biraz çelişkili bir örnek, ancak geçen sayıya bir ekleyen ve bir örnek değişkenine atayan böyle küçük bir işleve sahip olduğunuzu düşünün.
def plus_one_to_y(x)
@y = x + 1
end
Bu bir değer döndüren bir işlev miydi, değil miydi? Her ikisi de örnek değişkenini atadığı için VE geliştiricinin ne anlama geldiğini söylemek gerçekten zor VE atanan değeri de döndürüyor.
Çok daha sonra, başka bir programcı (belki de Ruby'nin yürütülen son kod satırına göre nasıl döndüğüne aşina olmadığı) varsayalım ve günlüğe kaydetmek için bazı yazdırma ifadeleri koymak istiyor ve işlev bu hale geliyor ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
Şimdi bir şey döndürülen bir değer bekliyorsa işlev bozulur . Hiçbir şey döndürülen bir değer beklemiyorsa, sorun olmaz. Kod zincirinin aşağısında bir yerde, bunu çağıran bir şey döndürülen bir değer bekliyorsa, beklediği şeyi geri almadığı için başarısız olacaktır.
Şimdi asıl soru şudur: bir şey gerçekten döndürülen bir değer bekliyor muydu? Bu bir şey mi kırdı yoksa değil mi? Gelecekte bir şey kıracak mı? Kim bilir! Tüm aramaların yalnızca tam kod incelemesi size bildirir.
Bu yüzden en azından benim için en iyi uygulama yaklaşımı ya bir şeyi önemliyse iade ettiğinizin çok açık olması ya da hiç olmadığı zaman hiçbir şey döndürmemenizdir.
Bu yüzden küçük demo fonksiyonumuzda, bir değer döndürmesini istediğimizi varsayarsak, bu şekilde yazılır ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
Ve herhangi bir programcı için bir değer döndürdüğü çok açıktır ve farkında olmadan onu kırmaları çok daha zordur.
Alternatif olarak, bu şekilde yazılabilir ve dönüş ifadesini bırakabilir ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
Ama neden kelime dönüşünü bırakarak zahmet ediyorsunuz? Neden sadece oraya koyup neler olduğunu% 100 netleştirmiyorsunuz? Kodunuzun gerçekleştirme yeteneği üzerinde hiçbir etkisi olmayacaktır.