Старый (и «отвеченный») вопрос, но в ответ я добавлю два цента.
TL; DR - Вам не нужно, но в некоторых случаях это может сделать ваш код более понятным.
Хотя не использование явного возврата может быть «способом Ruby», это сбивает с толку программистов, работающих с незнакомым кодом, или незнакомых с этой функцией Ruby.
Это несколько надуманный пример, но представьте себе небольшую функцию, подобную этой, которая добавляет единицу к переданному числу и присваивает ее переменной экземпляра.
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
И любому программисту было бы очень ясно, что оно возвращает значение, и им гораздо сложнее его сломать, даже не осознавая.
В качестве альтернативы, можно написать это так и пропустить оператор return ...
def plus_one_to_y(x)
@y = x + 1
puts "In plus_one_to_y"
@y
end
Но зачем вообще опускать слово «вернуться»? Почему бы просто не вставить это туда и не дать на 100% понять, что происходит? Это буквально не повлияет на способность вашего кода выполнять.