Работая над проектами, очень часто приходится видеть подобный код
function someFunction($a, $b) { if (($a->someMethod('someString1' && $a->someMethod('someString2')) || $b->someMethod('someString')) { $b->someMethod($a); if ($b->someMethod3('someString4')) { $b->someMethod4(); } } }
В принципе это обычная практика, противозаконного в ней ничего нет, но читать и поддерживать подобные вещи сложновато.
В данном коде есть 2 проблемы:
1. Сложное комплексное условие;
2. Необоснованная вложенность условий;
Благо, существует прием, который позволяет устранить эти проблемы. Название ему - досрочный выход из функции. Суть приема заключается в том, что нужно пытаться выйти (возврящать return) из функции как можно раньше.
function someFunction($a, $b) { if (!($a->someMethod('someString1' && $a->someMethod('someString2'))) { if (!$b->someMethod('someString')) { return; } } $b->someMethod($a); if ($b->someMethod3('someString4')) { $b->someMethod4(); } }
Конечно есть очевидные минусы этого подхода:
1. Увеличение количества строк кода;
2. Иногда приходится перемещать большое количество строчек кода при добавлении нового условия;
Хоть эти минусы очевидны, но для меня они не критичны. я вижу в таком подходе только пользу, те минусы, что у него есть не сильной влияют на качество кода, в тоже время плюсы, который я получаю от использования его, делают мой код понятней для других