Antigua (y "contestada") pregunta, pero arrojaré mis dos centavos como respuesta.
TL; DR: no es necesario, pero puede hacer que su código sea mucho más claro en algunos casos.
Aunque no usar un retorno explícito puede ser "la forma de Ruby", es confuso para los programadores que trabajan con código desconocido o no están familiarizados con esta característica de Ruby.
Es un ejemplo un tanto artificial, pero imagine tener una pequeña función como esta, que agrega uno al número pasado y lo asigna a una variable de instancia.
def plus_one_to_y(x)
@y = x + 1
end
¿Se suponía que era una función que devolvía un valor o no? Es realmente difícil decir qué quiso decir el desarrollador, ya que asigna la variable de instancia Y devuelve el valor asignado también.
Supongamos que mucho más tarde, aparece otro programador (tal vez no tan familiarizado con cómo Ruby regresa en función de la última línea de código ejecutada) y quiere poner algunas declaraciones de impresión para el registro, y la función se convierte en esto ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
end
Ahora la función está rota si algo espera un valor devuelto . Si nada espera un valor devuelto, está bien. Claramente, si en algún lugar más abajo de la cadena de código, algo que llama a esto espera un valor devuelto, fallará ya que no está recuperando lo que espera.
La verdadera pregunta ahora es esta: ¿esperaba algo realmente un valor devuelto? ¿Esto rompió algo o no? ¿Romperá algo en el futuro? ¡Quién sabe! Solo una revisión completa del código de todas las llamadas te lo hará saber.
Entonces, al menos para mí, el enfoque de mejores prácticas es ser muy explícito de que está devolviendo algo si es importante, o no devolver nada cuando no lo es.
Entonces, en el caso de nuestra pequeña función de demostración, suponiendo que deseamos que devuelva un valor, se escribiría así ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
return @y
end
Y sería muy claro para cualquier programador que devuelve un valor, y mucho más difícil para ellos romperlo sin darse cuenta.
Alternativamente, uno podría escribirlo así y omitir la declaración de devolución ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
Pero, ¿por qué molestarse en dejar de lado la palabra retorno? ¿Por qué no simplemente ponerlo allí y dejar 100% claro lo que está sucediendo? Literalmente no tendrá ningún impacto en la capacidad de rendimiento de su código.