Примеры на Яваскрипте, но совет актуален для всех языков программирования, где условия создают вложенность
Проверки условий в коде создают уровни вложенности. Вложенность усложняет работу с кодом: приходится держать в голове все условия и текущий уровень вложенности. Легко запутаться, пропустить «дыры» в логике и сценариях.
Примеры на Яваскрипте, но совет актуален для всех языков программирования, где условия создают вложенность
Чтобы избавиться от вложенности, инвертируйте проверки. Вместо проверки выполнения условия, проверяйте невыполнение. Если условие не выполнено, сразу выходите из функции или пускайте программу по более короткому пути.
Былоfunction render(data) { if (data.isChanged) { … … … if (data.count) { … … … } } else { this.sync() } }
Сталоfunction render(data) { if (!data.isChanged) { this.sync() return } … … … if (!data.count) return … … … }
Сложность кода серьёзно уменьшилась. Во время чтения больше не нужно держать в голове все условия.
Приём называется Guard Clause. А мне нравится называть его «вышибалой». Типа, «не прошли фейс‑контроль — дальше не пущу» :‑)
Не могу придумать ситуацию, когда использование Guard Clause повредит коду. Приём, кажется, беспроигрышный. Знаете, когда Guard Clause повредит? Напишите в коментах.
P. S. Это был совет о веб‑разработке. Хотите знать всё о коде, тестах, фронтенд‑разработке, цеэсэсе, яваскрипте, рельсах и джейде? Присылайте вопросы.