Стиль программирования - Programming style

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

Классическая работа на эту тему была Элементы стиля программирования, написанная в 1970-х годах и проиллюстрированная примерами из Фортран и PL / I языки преобладали в то время.

Стиль программирования, используемый в конкретной программе, может быть получен из соглашения о кодировании компании или другой вычислительной организации, а также предпочтениям автора кода. Стили программирования часто разрабатываются для определенного язык программирования (или языковая семья): стиль считается хорошим в C исходный код может не подходить для БАЗОВЫЙ исходный код и т. д. Однако некоторые правила обычно применяются ко многим языкам.

Элементы хорошего стиля

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

Внешний вид кода

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

Отступ

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

если (часы < 24 && минут < 60 && секунды < 60) {    вернуть истинный;} еще {    вернуть ложный;}

или

если (часы < 24 && минут < 60 && секунды < 60){    вернуть истинный;}еще{    вернуть ложный;}

с чем-то вроде

если  ( часы   < 24   && минут < 60   && секунды < 60){вернуть    истинный;}         еще{вернуть   ложный;}

Первые два примера, вероятно, намного легче читать, потому что они имеют определенный отступ (стиль «висящего абзаца»). Этот стиль отступа особенно полезен при работе с несколькими вложенными конструкциями.

ModuLiq

Группы ModuLiq Zero Indentation Style с возврат каретки а не вмятины. Сравните все вышеперечисленное с:

если (часы < 24 && минут < 60 && секунды < 60)вернуть истинный;ещевернуть ложный;

Lua

Lua не использует традиционные Фигурные скобки или скобка. Операторы if / else требуют только выражения, за которым следует тогдаи закрытие оператора if / else с помощью конец.

если часы < 24 и минут < 60 и секунды < 60 тогда  вернуть истинныйеще  вернуть ложныйконец

Отступы необязательны. и, или, нет используются между утверждениями истина / ложь.

Это истинные / ложные утверждения, поскольку

Распечатать(нет истинный)

будет означать ложь.

Python

Python использует отступ для обозначения управляющих структур, поэтому правильный отступ требуется. Таким образом, необходимость в брекетинге с Фигурные скобки (т.е. { и }) исключается. С другой стороны, копирование и вставка кода Python может привести к проблемам, поскольку уровень отступа вставленного кода может не совпадать с уровнем отступа текущей строки. Такое переформатирование вручную может быть утомительным, но некоторые текстовые редакторы и Иды есть функции, позволяющие делать это автоматически. Существуют также проблемы, когда код Python становится непригодным для использования при размещении на форуме или веб-странице, которая удаляет пробелы, хотя этой проблемы можно избежать, если можно заключить код в теги, сохраняющие пробелы, такие как "

 .. . 
"(для HTML ), "[код]" ... "[/ код]" (для bbcode ), так далее.

если часы < 24 и минут < 60 и секунды < 60:    вернуть Истинныйеще:    вернуть Ложь

Обратите внимание, что в Python используются не фигурные скобки, а обычное двоеточие (например, еще:).

Многие программисты Python склонны следовать общепринятому руководству по стилю, известному как PEP8.[1] Существуют инструменты, предназначенные для автоматизации соответствия PEP8.

Haskell

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

позволять c_1 = 1    c_2 = 2в    ж Икс у = c_1 * Икс + c_2 * у

можно записать одной строкой как:

позволять {c_1=1;c_2=2} в ж Икс у = c_1 * Икс + c_2 * у

Haskell поощряет использование грамотное программирование, где расширенный текст объясняет происхождение кода. В грамотных скриптах Haskell (названных с lhs extension), все является комментарием, кроме блоков, отмеченных как код. Программа может быть написана на Латекс, в таком случае код среда отмечает, что такое код. Также каждый активный абзац кода может быть помечен предшествующей и завершающей его пустой строкой и началом каждой строки кода со знака «больше» и пробела. Вот пример использования разметки LaTeX:

В функция \глагол+isValidDate+ тестовое задание если Дата является действительный\начинать{код}isValidDate :: Дата -> BoolisValidDate Дата = чч>=0  && мм>=0 && SS>=0                 && чч<24 && мм<60 && SS<60 куда (чч,мм,SS) = с даты Дата\конец{код}наблюдать это в это кейс то перегружен функция является \глагол+с даты :: Дата -> (Int,Int,Int)+.

И пример с использованием обычного текста:

В функция isValidDate тестовое задание если Дата является действительный> isValidDate :: Дата -> Bool> isValidDate Дата = чч>=0  && мм>=0 && SS>=0>                  && чч<24 && мм<60 && SS<60>  куда (чч,мм,SS) = с даты Датанаблюдать это в это кейс то перегружен функция является с даты :: Дата -> (Int,Int,Int).

Вертикальное выравнивание

Часто бывает полезно выровнять похожие элементы по вертикали, чтобы сделать ошибки, вызванные опечатками, более очевидными. Сравнивать:

$ поиск = множество('а', 'b', 'c', 'd', 'е');$ замена = множество('фу', 'бар', 'баз', quux);// Другой пример:$ значение = 0;$ другое значение = 1;$ пока другое значение = 2;

с:

$ поиск      = множество('а',   'b',   'c',   'd',   'е');$ замена = множество('фу', 'бар', 'баз', quux);// Другой пример:$ значение           = 0;$ другое значение    = 1;$ пока другое значение = 2;

Последний пример интуитивно проясняет две вещи, которые не были ясны в первом:

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

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

  • Межстрочные ложные зависимости; табличное форматирование создает зависимости между строками. Например, если идентификатор с длинным именем добавляется в макет таблицы, ширину столбца, возможно, придется увеличить, чтобы уместить его. Это вынуждает внести в исходный код больше изменений, чем необходимо, и существенное изменение может затеряться в шуме. Это вредно для Контроль версий где важна проверка различий между версиями.
  • Хрупкость; если программист не отформатирует таблицу аккуратно при внесении изменений, возможно, законно с учетом предыдущего пункта, результатом станет беспорядок, который ухудшается при последующих таких изменениях. Простые операции рефакторинга, такие как поиск и замена, также могут нарушить форматирование.
  • Устойчивость к модификации; Табличное форматирование требует больше усилий для поддержания. Это может помешать программисту внести полезные изменения, такие как добавление, исправление или улучшение имени идентификатора, потому что это испортит форматирование.
  • Использование одинарного шрифта; табличное форматирование предполагает, что редактор использует шрифт фиксированной ширины. Многие современные редакторы кода поддерживают пропорциональные шрифты, и программист может предпочесть использовать пропорциональный шрифт для удобства чтения.
  • Зависимость от инструмента; некоторые усилия по поддержанию выравнивания можно облегчить с помощью инструментов (например, редактор исходного кода что поддерживает эластичные петлицы ), хотя это создает зависимость от таких инструментов.

Например, если выполнить простую операцию рефакторинга в приведенном выше коде, переименовав переменные «$ replace» в «$ r» и «$ anothervalue» в «$ a», полученный код будет выглядеть следующим образом:

$ поиск      = множество('а',   'b',   'c',   'd',   'е');$ r = множество('фу', 'бар', 'баз', quux);// Другой пример:$ значение           = 0;$ а    = 1;$ пока другое значение = 2;

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

$ поиск = множество('а', 'b', 'c', 'd', 'е');$ r = множество('фу', 'бар', 'баз', quux);// Другой пример: $ значение = 0;$ а = 1;$ пока другое значение = 2;

Пространства

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

Например, сравните следующие синтаксически эквивалентные примеры кода C:

int я;за(я=0;я<10;++я){    printf("% d",я*я+я);}

против

int я;за (я = 0; я < 10; ++я) {    printf("% d", я * я + я);}

Вкладки

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

Например, один программист предпочитает табуляция из четырех, и их набор инструментов настроен таким образом, и использует их для форматирования своего кода.

int     ix;     // Индекс для сканирования массивадлинная    сумма;    // Аккумулятор для суммы

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

int             ix;             // Индекс для сканирования массивадлинная    сумма;    // Аккумулятор для суммы

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

класс Мой класс {	int foobar(		int qux, // первый параметр		int quux); // второй параметр	int foobar2(		int qux, // первый параметр		int quux, // второй параметр		int Quuux); // третий параметр};

Смотрите также

Рекомендации

  1. ^ «PEP 0008 - Руководство по стилю для кода Python». python.org.

внешняя ссылка