Старый (и "отвеченный") вопрос, но я добавлю два цента в качестве ответа.
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
Но зачем вообще опускать слово return? Почему бы просто не положить это туда и не дать на 100% понять, что происходит? Это буквально не повлияет на способность вашего кода выполнять.