Программирование >>  Решение нетривиальных задач 

1 ... 11 12 13 [ 14 ] 15 16 17 ... 77


39. Пробел - один из наиболее эффективных комментариев

Это кажется мелочью, но это может чрезвычайно улучшить читаемость вашей программы. Обратите внимание, как используются пробелы в этой книге в качестве организующего средства, и вы поймете, как использовать их в своей собственной программе. Пустые строки (или отступ в первой строке) зрительно разделяют абзацы. Пробел следует за точкой, но не должен ей предшествовать, потому что точка завершает что-либо. Идея вам ясна. А вот правила:

Разбивайте текст программы на логические куски (т.е. абзацы), где каждый кусок выполняет одну операцию. Окружите эти куски или пустыми строками, или строками с фигурными скобками.

За знаком препинания всегда должен идти пробел.

Операторы являются сокращениями слов. Когда вы видите + , то говорите плюс . Подобно любому сокращению, вы должны окружать идентификатор пробелами. (Например: a + b читается a плюс b , a+b читается aплюсb ).

Исключение составляют унарные операторы, которые рассматриваются как словарные префиксы или суффиксы (*p, a-, f(arg,arg) и т.д.).

. или > в Си/Си++ являются эквивалентом символа подчеркивания. До и после них пробелов быть не должно: p >msg(), obj.msg().

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

int *p;

y=(x/*p++);

f(int /* вставка */);

Если вы удалите комментарии, то получите:

int *p;

y=(x

Сочетание /* в выражении y=(x/*p++) расценивается как символ начала комментария, который заканчивается сочетанием */ в вызове функции f() . (Такой случай действительно со мной произошел, и мне потребовался целый день, чтобы в нем разобраться. Естественно, компилятор не давал сообщений об ошибках, потому что здесь все синтаксически правильно).



Еще замечание по данному поводу. Мне часто приходилось позднее видеть объявления подобные следующему:

int* x;

Проблема состоит в том, что: int* x, y;

не объявляет два указателя, как подсказывает распределение пробелов. Здесь мы имеем на самом деле еще одну проблему из рода я могу на любом языке программирования писать как на ФОРТРАНЕ . Было бы прекрасно, если бы Си работал так же, как подсказывает предыдущее форматирование, но это не так. После правильного форматирования int *x, y;

становится совершенно ясно, что x - указатель, а y - нет.

40. Используйте отступы в четыре пробела

Никлас Вирт, который изобрел языки Паскаль и Модула-2, однажды выпустил книгу, где всюду использовались отступы в один символ. Чтение в ней листингов стало одним из самых тяжелых случаев в моей практике. Используйте достаточно большие отступы, чтобы ваш читатель мог сказать, что в тексте видно абзацы; четыре пробела кажутся идеальными.

Вы должны делать отступы последовательно. Даже во внешнем блоке подпрограммы должны быть отступы. Такой вариант неприемлем:

void f( void )

if( x ) yyy();

more code(); even more code();

потому что слишком трудно найти начало подпрограммы. Сравните предыдущий вариант со следующим:

void f( void )

if( x )

yyy();

more code(); even more code();



41. Условные операторы выделяются абзацными отступами

Я делаю это даже в операторах из одной строки:

if( by land ) one();

else

two(); а не так:

if( by land ) one() else two();

Очевидным исключением является:

if( by land )

one(); else if( by sea )

two(); else if( by air )

three();

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

if( by land )

one(); if(debug) printf( Ох... );

else if ( by sea )

что привело привело фактически к:

if( by land ) one();

if (debug)

printf( Ох... );

else

if( by sea )

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



1 ... 11 12 13 [ 14 ] 15 16 17 ... 77

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика