Для всех людей, которые утверждают, что вы не должны использовать неопределенные циклы while, и предлагаете глупые вещи, такие как использование open goto (серьезно, ой)
while (1) {
last if( condition1 );
code();
more_code();
last if( condition2 );
even_more_code();
}
Не может быть эффективно представлен любым другим способом. Не без создания выходной переменной и выполнения черной магии для ее синхронизации.
Если у вас есть склонность к более сложному синтаксису, используйте что-то вменяемое, ограничивающее область действия.
flow: {
if ( condition ){
redo flow;
}
if ( othercondition ){
redo flow;
}
if ( earlyexit ){
last flow;
}
something(); # doesn't execute when earlyexit is true
}
В конечном счете, скорость не так важна
Беспокойство по поводу того, насколько эффективны различные циклические конструкции, является огромной тратой времени. Преждевременная оптимизация насквозь. Я не могу вспомнить ни одной ситуации, в которой я когда-либо видел, чтобы профилирующий код нашел узкие места в моем выборе конструкции цикла.
Обычно это как цикла и что цикла.
Вы должны «оптимизировать» читабельность и лаконичность и написать все, что лучше при объяснении проблемы, следующему бедному обманщику, который найдет ваш код.
Если вы используете трюк "goto LABEL", о котором кто-то упоминал, и я должен использовать ваш код, будьте готовы спать с одним открытым глазом, особенно если вы делаете это более одного раза, потому что такого рода вещи создают ужасно код спагетти.
То, что вы можете создавать код спагетти, не означает, что вы должны