Vecchia (e "risposta") domanda, ma aggiungerò i miei due centesimi come risposta.
TL; DR - Non è necessario, ma in alcuni casi può rendere il codice molto più chiaro.
Anche se non usare un ritorno esplicito può essere "la via di Ruby", è fonte di confusione per i programmatori che lavorano con codice non familiare o non hanno familiarità con questa funzionalità di Ruby.
È un esempio un po 'inventato, ma immagina di avere una piccola funzione come questa, che aggiunge uno al numero passato e lo assegna a una variabile di istanza.
def plus_one_to_y(x)
@y = x + 1
end
Doveva essere una funzione che restituiva un valore o no? È davvero difficile dire cosa intendesse lo sviluppatore, poiché entrambi assegna la variabile di istanza e restituisce anche il valore assegnato.
Supponiamo molto più tardi, un altro programmatore (forse non così familiare con il modo in cui Ruby ritorna sulla base dell'ultima riga di codice eseguita) arriva e vuole inserire alcune istruzioni di stampa per la registrazione, e la funzione diventa questa ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
Ora la funzione è interrotta se qualcosa prevede un valore restituito . Se nulla prevede un valore restituito, va bene. Chiaramente se da qualche parte più in basso nella catena del codice, qualcosa che chiama questo si aspetta un valore restituito, fallirà perché non sta recuperando ciò che si aspetta.
La vera domanda ora è questa: qualcosa si aspettava davvero un valore restituito? Questo ha rotto qualcosa o no? Romperà qualcosa in futuro? Chissà! Solo una revisione completa del codice di tutte le chiamate ti farà sapere.
Quindi, almeno per me, l'approccio delle migliori pratiche è quello di essere molto esplicito che stai restituendo qualcosa se è importante, o di non restituire nulla quando non lo fa.
Quindi, nel caso della nostra piccola funzione demo, supponendo che volessimo restituire un valore, sarebbe scritto in questo modo ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
E sarebbe molto chiaro a qualsiasi programmatore che restituisce un valore, e molto più difficile per loro romperlo senza rendersene conto.
In alternativa, si potrebbe scrivere in questo modo ed escludere la dichiarazione di ritorno ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
Ma perché preoccuparsi di lasciare fuori la parola return? Perché non metterlo solo lì e chiarire al 100% cosa sta succedendo? Non avrà letteralmente alcun impatto sulla capacità di esecuzione del codice.