Alte (und "beantwortete") Frage, aber ich werde meine zwei Cent als Antwort einwerfen.
TL; DR - Sie müssen nicht, aber es kann Ihren Code in einigen Fällen viel klarer machen.
Obwohl die Verwendung einer expliziten Rückgabe möglicherweise "der Ruby-Weg" ist, ist dies für Programmierer, die mit unbekanntem Code arbeiten oder mit dieser Funktion von Ruby nicht vertraut sind, verwirrend.
Es ist ein etwas ausgeklügeltes Beispiel, aber stellen Sie sich vor, Sie hätten eine kleine Funktion wie diese, die der übergebenen Zahl eine hinzufügt und sie einer Instanzvariablen zuweist.
def plus_one_to_y(x)
@y = x + 1
end
War dies eine Funktion, die einen Wert zurückgab, oder nicht? Es ist wirklich schwer zu sagen, was der Entwickler gemeint hat, da beide die Instanzvariable zuweisen UND auch den zugewiesenen Wert zurückgeben.
Angenommen, viel später kommt ein anderer Programmierer (der vielleicht nicht so vertraut damit ist, wie Ruby basierend auf der zuletzt ausgeführten Codezeile zurückgibt) und möchte einige print-Anweisungen für die Protokollierung eingeben, und die Funktion wird zu dieser ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
Jetzt ist die Funktion unterbrochen, wenn etwas einen zurückgegebenen Wert erwartet . Wenn nichts einen zurückgegebenen Wert erwartet, ist dies in Ordnung. Wenn irgendwo weiter unten in der Codekette ein Aufruf einen zurückgegebenen Wert erwartet, wird dies eindeutig fehlschlagen, da er nicht das zurückerhält, was er erwartet.
Die eigentliche Frage lautet nun: Hat irgendetwas wirklich einen zurückgegebenen Wert erwartet? Hat das etwas kaputt gemacht oder nicht? Wird es in Zukunft etwas kaputt machen? Wer weiß! Nur eine vollständige Codeüberprüfung aller Anrufe informiert Sie.
Zumindest für mich besteht der Best-Practice-Ansatz darin, entweder sehr deutlich zu machen, dass Sie etwas zurückgeben, wenn es wichtig ist, oder überhaupt nichts zurückzugeben, wenn dies nicht der Fall ist.
Im Fall unserer kleinen Demofunktion würde sie also so geschrieben sein, vorausgesetzt, wir wollten, dass sie einen Wert zurückgibt ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
Und es wäre jedem Programmierer sehr klar, dass es einen Wert zurückgibt, und es ist für sie viel schwieriger, ihn zu brechen, ohne es zu merken.
Alternativ könnte man es so schreiben und die return-Anweisung weglassen ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
Aber warum sollte man sich die Mühe machen, das Wort Rückkehr wegzulassen? Warum nicht einfach dort hineinstecken und 100% klar machen, was passiert? Dies hat buchstäblich keinen Einfluss auf die Leistungsfähigkeit Ihres Codes.