Анимация
JavaScript
|
Главная Библионтека 39. Пробел - один из наиболее эффективных комментариев Это кажется мелочью, но это может чрезвычайно улучшить читаемость вашей программы. Обратите внимание, как используются пробелы в этой книге в качестве организующего средства, и вы поймете, как использовать их в своей собственной программе. Пустые строки (или отступ в первой строке) зрительно разделяют абзацы. Пробел следует за точкой, но не должен ей предшествовать, потому что точка завершает что-либо. Идея вам ясна. А вот правила: • Разбивайте текст программы на логические куски (т.е. абзацы), где каждый кусок выполняет одну операцию. Окружите эти куски или пустыми строками, или строками с фигурными скобками. • За знаком препинания всегда должен идти пробел. • Операторы являются сокращениями слов. Когда вы видите "+", то говорите "плюс". Подобно любому сокращению, вы должны окружать идентификатор пробелами. (Например: a + b читается "a плюс b", a+b читается "aплюсb"). • Исключение составляют унарные операторы, которые рассматриваются как словарные префиксы или суффиксы (*p, a-- , f(arg,arg) и т.д.). • . или -> в Си/Си++ являются эквивалентом символа подчеркивания. До и после них пробелов быть не должно: p->msg(), obj.msgO . Вот пример того, что может произойти, когда вы что-нибудь упаковываете слишком плотно. Рассмотрим: 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 ) Со скобками программа к тому же лучше читается. Я часто нарушаю правило абзацных отступов, когда использую форматирование для того, чтобы показать с кристальной ясностью, что происходит. Аккуратные столбцы делают это осуществимым: 0 1 2 3 4 5 6 7 8 9 10 11 12 [ 13 ] 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |