Обычно существует два типа методов, т. Е.
- Функциональные методы - возвращающие значение после запуска или вызова метода
- Процедурные методы - изменяющие внутреннее состояние объекта
Примером функционального метода будет
def max(num, another_num)
num > another_num ? num : another_num
end
, который вернет максимальное число, которое можно использовать для выполнения некоторых других вычислений.
Простым примером процедурного метода могут быть сеттеры или средства доступа к атрибутам в ruby, например
class Person
def name=(name)
@name = name
end
end
описанный выше метод изменяет внутреннее состояние объекта Person, т. Е. Устанавливает для переменной экземпляра @name указанное значение.
Так что все зависит от того, какой метод вы пишете, намерения вашего метода и как вы собираетесь его использовать. Другими словами, если это процедурный метод, то вы можете вернуть nil в конце, но лично я еще этого не делал, т.е. возвращать nil только при изменении состояния объекта, потому что это просто добавит строку кода и также сделает метод выглядеть сложным без добавления какого-либо значения в метод.
Тем не менее, Ruby всегда возвращает значение последнего оцененного оператора из метода, будь то процедурный или функциональный метод, который фактически делает удобным вычисление метода или некоторого условия внутри метода при некоторых обстоятельствах.