|
Программирование >> Решение нетривиальных задач
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 ) Со скобками программа к тому же лучше читается. Я часто нарушаю правило абзацных отступов, когда использую форматирование для того, чтобы показать с кристальной ясностью, что происходит. Аккуратные столбцы делают это осуществимым:
|
© 2006 - 2025 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |