Pergunta antiga (e "respondida"), mas colocarei meus dois centavos como resposta.
TL; DR - Você não precisa, mas pode tornar seu código muito mais claro em alguns casos.
Embora não usar um retorno explícito possa ser "o caminho do Ruby", é confuso para programadores que trabalham com código desconhecido ou não familiarizado com esse recurso do Ruby.
É um exemplo um tanto artificial, mas imagine ter uma pequena função como essa, que adiciona uma ao número passado e a atribui a uma variável de instância.
def plus_one_to_y(x)
@y = x + 1
end
Isso deveria ser uma função que retornou um valor ou não? É realmente difícil dizer o que o desenvolvedor quis dizer, pois atribui a variável de instância E retorna o valor atribuído também.
Suponha que, muito mais tarde, outro programador (talvez não familiarizado com o modo como o Ruby retorna com base na última linha de código executada) apareça e deseje colocar algumas instruções de impressão para registro, e a função se torne essa ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
Agora a função está quebrada se algo espera um valor retornado . Se nada espera um valor retornado, tudo bem. Claramente, se em algum lugar mais abaixo da cadeia de código, algo chamando isso de espera de um valor retornado, ele falhará, pois não receberá de volta o que espera.
A verdadeira questão agora é esta: algo realmente esperava um valor retornado? Isso quebrou alguma coisa ou não? Será que vai quebrar algo no futuro? Quem sabe! Somente uma revisão completa do código de todas as chamadas informará você.
Portanto, para mim, pelo menos, a abordagem da melhor prática é ser muito explícito que você está retornando algo, se for o caso, ou não devolve nada quando isso não acontece.
Portanto, no caso de nossa pequena função de demonstração, supondo que desejássemos retornar um valor, seria escrito assim ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
E seria muito claro para qualquer programador que ele retornasse um valor, e muito mais difícil para eles quebrá-lo sem perceber.
Como alternativa, pode-se escrever assim e deixar de fora a declaração de retorno ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
Mas por que se preocupar em deixar de fora a palavra retorno? Por que não colocá-lo lá e deixar 100% claro o que está acontecendo? Literalmente, não terá impacto na capacidade de execução do seu código.