Одной из ключевых концепций, которые позволяют сделать фрагмент кода более удобным для сопровождения для будущего разработчика, является его выразительность а>.
Рассмотрим следующие примеры:
([model1, model2].map(&:valid?)).all?
or
[model1.valid?,model2.valid?].all?
Оба они хорошо справляются со своей работой, но когда будущий разработчик столкнется с любым из них, не увидев никаких пояснительных комментариев, документов о ваших намерениях или не связавшись с вами напрямую, этот разработчик изменит их, не подозревая, что целью было избежать оценка короткого замыкания.
Еще хуже становится, когда у тебя нет тестов.
Вот почему я предлагаю ввести небольшой метод-оболочку, который сразу все прояснит.
def without_short_circuit_evaluation(*conditions)
conditions.all?
end
А потом где-нибудь в вашей кодовой базе.
if without_short_circuit_evaluation(model1.valid?, model2.valid?)
# do something
end
person
Marian13
schedule
30.05.2021