Правила программирования на Си и Си++

       

Используйте оператор 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();

}

потому что это нарушает контроль над циклом.



Содержание раздела