Страница 70 из 93
63. Используйте оператор for, если имеются любые два из инициализурующего, условного или инкрементирующего выражений.
Иначе используйте while. Такой код: int x = 10; // далее следует 200 строк кода, в которых переменная x не используется while ( x > 0 ) { // снова следует 200 строк кода f( x-- ); } не очень хорош, даже если вы сэкономили немного времени, соединив операцию декрементирования -- с вызовом функции. Переместите инициализацию и x-- в оператор for. Так как объявление в С++ может располагаться везде, где можно поместить оператор, то вы даже можете объявить x непосредственно перед for: int x = 10; for ( ; x > 0 ; --x ) { // следует 200 строк кода f(x); } (И хотя вы можете сказать, что в С++ есть возможность сделать for ( int=0;..., такая практика вводит в заблуждение, потому что на самом деле область видимости у x внешняя, как если бы ее объявление было сделано в строке, предшествующей оператору for. Я не рекомендую этого). Если три оператора внутри for слишком длинны, чтобы поместиться в одной строке, то вы можете их отформатировать их следующим образом: for ( некое_длинное_имя_переменной = f(); некое_длинное_имя_переменной ; некое_длинное_имя_переменной = f() ) { // ... } но часто лучше выделить одно из предложений вот так: int некое_длинное_имя_переменной = f(); for ( ; некое_длинное_имя_переменной ; некое_длинное_имя_переменной = f() ) { // ... } или в чрезвычайном случае int некое_чрезвычайно_длинное_имя_переменной = f(); for ( ; ; некое_чрезвычайно_длинное_имя_переменной = f() ) { if ( !некое_чрезвычайно_длинное_имя_переменной ) break;// ... } Главное - это сосредоточить инициализацию, проверку и инкрементирование в одном месте. Я никогда не сделаю так: int некое_чрезвычайно_длинное_имя_переменной = f(); while ( некое_чрезвычайно_длинное_имя_переменной ) { // много строк кода некое_чрезвычайно_длинное_имя_переменной = f(); } потому что это нарушает контроль над циклом. |