Используйте оператор 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();
}
потому что это нарушает контроль над циклом.