Если условия имеют аналогичные или связанные с семантикой, это, вероятно, лучше используйте логическое выражение вместо связки if
s. Что-то вроде
return a > 0 && strlen(str) > a && str[a] != NULL;
Но когда вы должны использовать if
, лучший подход к организации ветвления часто (если не всегда) зависит от характера самого if
.
В большинстве случаев if
s в коде являются «несбалансированными»: они либо имеют только одну ветку (нет else
), либо одна из ветвей «тяжелая», а другая - «светлая». В таких случаях всегда лучше сначала иметь дело с «простой» ветвью, а затем явно указывать, что обработка для этой ветки завершена. Это достигается с помощью первого варианта из вашего вопроса: определить ситуацию, которая требует «простой» обработки, сделать это и сразу return
(если вам нужно оставить функцию) или сделать continue
(если вам нужно перейти к следующему итерация цикла). Именно это мгновенно return
(или continue
), которые помогают читателю понять, что эта ветка выполнена, и больше не нужно беспокоиться об этом. Таким образом, типичная функция будет выглядеть следующим образом: куча if
s, которая «перехватывает» простые случаи, обрабатывает их (при необходимости) и return
немедленно. И только после того, как все упрощенные случаи будут обработаны, начнется общая «тяжелая» обработка. Функцию, организованную таким образом, намного легче читать, чем ту, которая содержит кучу вложенных if
s (как ваш второй вариант).
Некоторые могут утверждать, что return
s от середины функции или continue
в середине цикла идут вразрез с идеей «структурированного программирования». Но почему-то люди упускают из виду тот факт, что концепция «структурированного программирования» никогда не была предназначена для практического использования. Нет, принцип «return
ранний» (или «continue
ранний» в цикле) значительно улучшает читаемость кода, поскольку он явно подчеркивает тот факт, что обработка для этой ветки завершена. В случае «структурированного» if
что-то вроде этого гораздо менее очевидно.
Чтобы возобновить вышеуказанное: Избегайте вложенных if
s. Их трудно читать. Избегайте «несбалансированного» if
s. Их также трудно читать. Предпочитайте «плоский» стиль разветвления, который сначала обрабатывает простые случаи и немедленно завершает обработку, делая явно return
или continue
.
Второй формат будет доступен для чтения. И вы можете иметь эти три выражения в условии &&. Итак, вы будете использовать только одно условие if. – Pavunkumar
Возможно, мой образец кодирования не был «правильным» для вопроса. Я знаю, что вы можете поставить одно условие линии. Но я пытаюсь спросить о самой привычке кодирования. – aviv