Для более комплексного решения вы можете проверить Ввести нулевой объект Рефакторинг . Основная механика этого рефакторинга заключается в том, что вместо проверки nil
в клиентском коде вы вместо этого убедитесь, что провайдер никогда не выдаст nil
во-первых, вводить контекстный нулевой объект и возвращать его.
Итак, верните пустую строку, пустой массив, пустой хеш, или специального пустого клиента, или пустого пользователя, или что-то еще вместо nil
, и тогда вам никогда не понадобится проверять nil
в первую очередь.
Итак, в вашем случае у вас будет что-то вроде
class NullUser < User
def name
return ''
end
end
Тем не менее, в Ruby действительно есть другой, довольно элегантный способ реализации рефакторинга «Ввести нулевой объект»: вам на самом деле не нужно вводить нулевой объект, потому что nil
равен уже объект! Таким образом, вы могли бы monkey-patch nil
вести себя как NullUser - однако все обычные предупреждения и ловушки, связанные с исправлением обезьян, применяются в этом случае еще сильнее, поскольку nil
тихо глотает NoMethodError
s или что-то вроде это может полностью испортить ваш опыт отладки и сделать действительно трудным для отслеживания случаев, когда существует nil
, которого не должно быть (в отличие от nil
, который служит нулевым объектом ).