В то время как вы можете сделать возврат в однострочный, это один из тех случаев, когда я думаю, что быть немного более явным, а скимм стоит того. Это, конечно, спорно, но после работы на много разных команды с Рубистами Я думаю, что если вы идете к версии в одной строки есть хороший шанс, что вы (или другой член вашей команды) можете извратить потенциальные состояния выхода при просмотре код позже.
Я хотел бы предложить:
def ident_list(keys)
id = nil
ident_a_node = nil
## method hidden
return IdentifierListNode.new(id, ident_a_node) unless id.nil?
nil
end
или если вы не заботитесь о разнице между ложной/ноль в этом случае, даже лучше:
def ident_list(keys)
id = nil
ident_a_node = nil
## method hidden
return IdentifierListNode.new(id, ident_a_node) if id
nil
end
Довольно много всех, кто работал в рубине на некоторое время понимает, что окончательное значение в методе неявно возвращается (т. е. оно вернет нуль, если возврат не заблаговременно), - и вы можете получить этот взгляд. Мой опыт заключается в том, что многие люди, которые долгое время работали с рубином, все еще сталкиваются с изменениями & & и менее явными условными доходами.
Если вы решили использовать один вкладыш, я бы с ответом Райана, в основном потому, что это идиома, которая используется довольно часто и менее вероятно, следует путать:
def ident_list(keys)
id = nil
ident_a_node = nil
## method hidden
id && IdentifierListNode.new(id, ident_a_node)
end
Одно предостережение к этот подход является то, что вы на самом деле в конечном итоге с тремя возможными состояниями возвратных вместо двух (другие варианты будут возвращать только ноль или ваш новый IdentifierListNode
):
- Когда идентификатор равен нулю, возвращаемое значение будет нулевой
- WhenИдентификатор ложно, возвращаемое значение будет ложным
- Когда идентификатор ничего другого, возвращаемое значение будет ваш
IdentifierListNode
объект
Спасибо, я не знал, что он вернет нуль, если не будет явно там –