Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Курсовая3.doc
Скачиваний:
0
Добавлен:
01.05.2025
Размер:
1.82 Mб
Скачать

1.4.3. Отступы

Правильное использование отступов являются ключевым методом обеспечения читаемости. Идея состоит в том, что отступы зрительно

показывают подчиненность (иерархию) операторов. При этом директивы препроцессора (#include, #define и т.д.), описания классов, структур, типов, глобальных данных и определения функций всегда имеют наивысший приоритет, то есть начинаются с крайней левой позиции.

1.4.4. Основные правила использования отступов таковы.

Правило 1. Операторы одного уровня иерархии должны иметь равный отступ:

Правило 2. Подчиненные операторы должны быть сдвинуты вправо по отношению к управляющему оператору, образуя следующий уровень иерархии:

Правило 3. Размер сдвига должен быть постоянным:

Размер сдвига не должен быть ни слишком мал, ни слишком велик. Оптимальная величина составляет 2-5 пробелов. Наиболее часто для сдвигов используют табуляцию, устанавливая при этом для нее желаемый шаг. Последняя возможность поддерживается большинством интегрированных сред разработчика.

1.4.5. Операторные скобки

Существует два основных стиля расстановки операторных скобок. При использовании первого стиля открывающаяся скобка помещается на той же строке, что и управляющая конструкция, а закрывающаяся - строго на уровне управляющей конструкции:

int factorial( int n ) {

if( n > 1 )

return n * factorial( n-1 );

if( n < 0 ) {

fprintf( stderr, "Factorial error: negative argument\n" );

return -1; //Заведомо невозможный результат

}

return 1;

}

Второй подход покажем на том же примере:

int factorial( int n )

{

if( n > 1 )

return n * factorial( n-1 );

if( n < 0 )

{

fprintf( stderr, "Factorial error: negative argument\n" );

return -1; //Заведомо невозможный результат

}

return 1;

}

Как видно, отличие состоит в положении открывающейся скобки. Однако закрывающаяся скобка в обоих случаях должна находится на уровне управляющего оператора или описания.

Многим специалистам представляется, что второй подход оправдан в большей мере, так как обеспечивает улучшенную наглядность. Открывающаяся и закрывающаяся скобки при этом располагаются строго друг под другом, что помогает находить начало и конец составного оператора, функции или описания класса.

Заметим, что наличие или отсутствие скобок не влияет на наличие и размер отступов, что видно в приведенных примерах.

Изредка можно встретить еще и третий стиль, подобный второму, но характеризующийся расположением скобок где-нибудь внутри отступа:

int factorial( int n )

{

if( n > 1 )

return n * factorial( n-1 );

if( n < 0 )

{

fprintf( stderr, "Factorial error: negative argument\n" );

return -1; //Заведомо невозможный результат

}

return 1;

}

Этот стиль, несомненно, хуже второго, поскольку не только не привносит какой-либо дополнительной ясности, но и несколько снижает ее. Во-первых, выбор положения скобок где-то внутри отступа произволен и ничем не обоснован. Во-вторых, количество вертикальных зрительных линий отступов из-за этого удваивается и составляет вместо обычных четырех-пяти линий восемь-десять, что снижает наглядность без повышения информативности.