Работая над проектами, очень часто приходится видеть подобный код
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. Иногда приходится перемещать большое количество строчек кода при добавлении нового условия;
Хоть эти минусы очевидны, но для меня они не критичны. я вижу в таком подходе только пользу, те минусы, что у него есть не сильной влияют на качество кода, в тоже время плюсы, который я получаю от использования его, делают мой код понятней для других