Continue и break
Continue и break - это тот же самый goto, только названы по-другому. Именно поэтому они рассмотрены в этой части документа.
Как и goto, continue и break творят всякие разные чудеса в коде, поэтому их использование рекомендуется свести до минимума. Одним мановением руки читатель кода переносится бог знает куда по какой-то незадокументрированной причине. При использовании continue возникают две проблемы:
continue может обойти условный блок;
continue может обойти наращивание/уменьшение.
Пример
Представим себе ситуацию, где имеют место обе проблемы:
while (TRUE) { ... // Много кода ... if (/* какое-то условие */) { continue; } ... // Много кода ... if ( $i++ > STOP_VALUE) break; } |
Note: "много кода" нужно для того, чтобы программист не смог легко отследить проблему.
Из приведённого выше примера мы можем составить себе следующее правило: использование continue и break в одном блоке - прямая дорога к багам.
?:
Проблема обычно заключается в том, что люди пытаются запихать слишком много кода между ? и :. Вот несколько правил:
Условие заключайте в скобки, тем самым отделяя его от остального кода;
По возможности действия, производимые по условию, должны быть простыми функциями;
Если весь блок ветвления плохо читается, будучи расположен на одной строке, то блоки else и then размещайте каждый на отдельной строке.
Пример