Я только что натолкнулся на очень интересную статью статьи от WPShout, которая использует очень человеческую аналогию, чтобы предложить нам разумнее кодировать, и почему глубоко вложенные операторы if { .. }
могут ухудшить не только производительность, но итакже ремонтопригодность кода.Если логика ориентирована на производительность, без ненужных раздутых итерационных проверок, скорее всего, вы получите довольно хорошо организованный, отзывчивый и понятный код.
ПРИМЕР КОДА (извлечено из статьи)
«Давайте сделаем это конкретнее, посмотрев на два простых примера кода: сначала в стиле Bubble, а затем в стиле Gateway».
Bad: Bubble-Style
$is_first_thing_working = true;
$is_second_thing_working = true;
$is_third_thing_working = true;
$is_fourth_thing_working = true;
if( $is_first_thing_working === true ) {
if( $is_second_thing_working === true ) {
if( $is_third_thing_working === true ) {
if( $is_fourth_thing_working === true ) {
return 'Working properly!';
}
else {
return 'Fourth thing broken.';
}
}
else {
return 'Third thing broken.';
}
}
else {
return 'Second thing broken.';
}
}
else {
return 'First thing broken.';
}
Хорошо: Gateway-Style
$is_first_thing_working = true;
$is_second_thing_working = true;
$is_third_thing_working = true;
$is_fourth_thing_working = true;
if( $is_first_thing_working !== true ) {
return 'First thing broken.';
}
if( $is_second_thing_working !== true ) {
return 'Second thing broken.';
}
if( $is_third_thing_working !== true ) {
return 'Third thing broken.';
}
if( $is_fourth_thing_working !== true ) {
return 'Fourth thing broken.';
}
return 'Working properly!';
ПРИМЕЧАНИЯ НА ПРИМЕРЕ
Разница между двумя кодамиприведенные выше фрагменты сводятся к ключевому различию:
Пузырьковый метод спрашивает, являются ли важные условия истинными, и запускает код, только если они истинны.
Метод шлюза спрашивает, являются ли важные условия ложными,и немедленно выдает инструкции по выходу для каждого условия, если оно ложно.
Пузырьковый метод вызывает вложение, потому что вы должны проверить «истина, истина, истина, истина» , прежде чем перейти к кодуты хочешь бежать.Каждая «истинная» проверка - это уровень вложенности - условие, в котором должен жить ваш код.
Метод шлюза не является вложенным: как видите,код никогда не бывает более чем одним слоем логики.Это потому, что как только данный шлюз пройден, мы можем полностью об этом забыть.Другими словами, поскольку мы не вышли после проверки $is_first_thing_working
, мы автоматически знаем, что $is_first_thing_working
равно true для остальной части кода.
"Этокак в реальной жизни: если вы сидите рядом со мной на уроке истории, я знаю, что вы человек, студент моей средней школы и т. д., иначе вы бы никогда не были в моем классе.Не нужно проверять. "