Иллюстрированный самоучитель по практике программирования

Выражения

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

Форматируйте код, подчеркивая его структуру.
Форматирование кода логично выбранными отступами – самый простой способ добиться того, чтобы структура программы стала самоочевидна.

Приведенный фрагмент плохо отформатирован:

? for(n++;n<100;field[n++]='\(0');
? *i = \0'; return('\n);

Проведя простейшее форматирование, мы несколько улучшим его:

Иллюстрированный самоучитель по практике программирования › Стиль › Выражения

Еще лучше – перенести оператор присваивания в тело цикла и выделить инкремент (приращение) счетчика в отдельный оператор, тогда цикл примет более традиционный вид и, следовательно, можно будет быстрее догадаться о его смысле.

Иллюстрированный самоучитель по практике программирования › Стиль › Выражения

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

if (!(block_id < actblks)!(blocked >= unblocks))

Здесь каждая проверка используется с отрицанием, однако необходимости в этом нет никакой. Достаточно изменить знаки сравнения, и можно обойтись без отрицаний:

if ((blocked >= actblks) || (blockj.d < unblocks))

Теперь код читается вполне естественно.

Используйте скобки для устранения неясностей.
Скобки подчеркивают смысловую группировку кода, и их можно использовать для упрощения понимания его структуры даже тогда, когда с точки зрения грамматики в их применении нет необходимости. Так, в предыдущем примере внутренние скобки не нужны, однако их применение как минимум ничему не мешает. Бывалый программист мог бы и опустить их, поскольку операторы сравнения (<=<==! › ›) имеют более низкий приоритет, чем логические операторы (&& и | |).

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

while ((с = getchar())!= EOF)
…
Если Вы заметили ошибку, выделите, пожалуйста, необходимый текст и нажмите CTRL + Enter, чтобы сообщить об этом редактору.