舊的(和「回答」)問題,但我會折騰我的兩分錢作爲答案。
TL; DR - 您不需要,但它可以使您的代碼在某些情況下更加清晰。
雖然不使用顯式返回可能是「Ruby方式」,但是對於使用不熟悉的代碼的程序員或者不熟悉Ruby的這個特性會感到困惑。
例如,可能會有一個像這樣的小函數,它將傳入的數字加1,並將其分配給實例變量。
def plus_one_to_y(x)
@y = x + 1
end
這是否意味着一個函數返回值,或不是?很難說開發人員的意思,因爲它既分配實例變量,又返回分配的值。
假設很久以後,另一個程序員(可能不熟悉Ruby如何根據最後一行代碼執行返回操作)會出現,並且希望將某些打印語句放入日誌中,並且該函數變成了這個...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
現在功能壞了如果有什麼需要返回值。如果沒有什麼期望返回值,那很好。顯然,如果在代碼鏈的更遠處,調用它的東西需要一個返回值,它會失敗,因爲它沒有恢復到期望的值。
現在真正的問題是這樣的:真的有什麼期望返回值嗎?這是否破壞了某些東西?它會在未來破壞一些東西嗎?誰知道!只有全面的代碼審查所有電話會讓你知道。
至少對我來說,最佳實踐方法是要麼非常明確地表明,如果事情重要的話你會返回一些東西,或者什麼都不會返回。
在我們的小演示功能的情況下,
因此,假設我們希望它返回一個值,它會被寫成這樣...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
那將是讓程序員很清楚,它確實會返回一個價值,並且他們很難在沒有意識到的情況下打破它。
或者,我們可以把它寫像這樣,離開了返回語句...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
但爲什麼還要離開了這個詞的回報?爲什麼不把它放在那裏,讓它100%清楚發生了什麼?它實際上不會影響您的代碼的執行能力。
如果你的意圖仍然清晰,你也可以寫「return nil if fail_some_early_check」 – 2009-06-21 08:36:27
這是無效代碼,使答案混淆。 – 2011-08-10 03:17:52
@Andew - 修正。希望現在適合你。 – Gishu 2011-08-10 04:49:15