Pertanyaan lama (dan "dijawab"), tetapi saya akan melemparkan dua sen saya sebagai jawaban.
TL; DR - Anda tidak harus melakukannya, tetapi itu bisa membuat kode Anda jauh lebih jelas dalam beberapa kasus.
Meskipun tidak menggunakan pengembalian eksplisit mungkin "cara Ruby", itu membingungkan bagi programmer yang bekerja dengan kode asing, atau tidak terbiasa dengan fitur Ruby ini.
Ini adalah contoh yang agak dibuat-buat, tetapi bayangkan memiliki fungsi kecil seperti ini, yang menambahkan satu ke angka yang lewat, dan menugaskannya ke variabel instan.
def plus_one_to_y(x)
@y = x + 1
end
Apakah ini dimaksudkan sebagai fungsi yang mengembalikan nilai, atau tidak? Sangat sulit untuk mengatakan apa yang dimaksud pengembang, karena keduanya memberikan variabel instan, DAN mengembalikan nilai yang ditetapkan juga.
Misalkan nanti, programmer lain (mungkin tidak terlalu familiar dengan bagaimana Ruby mengembalikan berdasarkan baris terakhir dari kode yang dieksekusi) datang dan ingin memasukkan beberapa pernyataan cetak untuk logging, dan fungsinya menjadi seperti ini ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
Sekarang fungsinya rusak jika ada yang mengharapkan nilai yang dikembalikan . Jika tidak ada yang mengharapkan nilai yang dikembalikan, tidak apa-apa. Jelas jika suatu tempat lebih jauh ke bawah rantai kode, sesuatu yang memanggil ini mengharapkan nilai yang dikembalikan, itu akan gagal karena tidak mendapatkan kembali apa yang diharapkan.
Pertanyaan sebenarnya sekarang adalah ini: apakah ada yang benar-benar mengharapkan nilai yang dikembalikan? Apakah ini merusak sesuatu atau tidak? Akankah itu merusak sesuatu di masa depan? Siapa tahu! Hanya tinjauan kode lengkap dari semua panggilan yang akan memberi tahu Anda.
Jadi bagi saya setidaknya, pendekatan praktik terbaik adalah dengan sangat eksplisit bahwa Anda mengembalikan sesuatu jika itu penting, atau tidak menghasilkan apa-apa sama sekali ketika tidak.
Jadi dalam kasus fungsi demo kecil kami, dengan asumsi kami ingin mengembalikan nilai, itu akan ditulis seperti ini ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
Dan akan sangat jelas bagi setiap programmer bahwa ia mengembalikan nilai, dan jauh lebih sulit bagi mereka untuk memecahkannya tanpa menyadarinya.
Atau, orang dapat menulis seperti ini dan meninggalkan pernyataan kembali ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
Tapi mengapa repot-repot meninggalkan kata kembali? Mengapa tidak letakkan saja di sana dan buatlah 100% jelas apa yang terjadi? Ini benar-benar tidak akan berdampak pada kemampuan kode Anda untuk melakukan.