stringtranslate.com

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

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

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

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

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

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

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

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

Отступ

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

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

или

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

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

if ( часы < 24 && минуты < 60 && секунды < 60 ) { return true ;} else { return false ;}               

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

МодуЛик

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

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

Луа

Lua не использует традиционные фигурные скобки или круглые скобки ; скорее, за выражением в условном операторе должен следовать then, а блок должен закрываться с помощью end.

если  часы  <  24  ,  минуты  <  60  и  секунды  <  60  , тогда  верните  true , иначе  верните  ложное завершение

Отступы в Lua не являются обязательными. and, orи notфункционируют как логические операторы в Lua.

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

распечатать ( неправда  ) _

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

Питон

Python использует отступы для обозначения управляющих структур, поэтому требуется правильный отступ . При этом отпадает необходимость в заключении фигурных скобок (т. е. {и ). }С другой стороны, копирование и вставка кода Python может привести к проблемам, поскольку уровень отступа вставленного кода может не совпадать с уровнем отступа текущей строки. Такое переформатирование вручную может быть утомительным, но некоторые текстовые редакторы и IDE имеют функции, позволяющие делать это автоматически. Также возникают проблемы, когда код Python становится непригодным для использования при публикации на форуме или веб-странице, где удаляются пробелы, хотя этой проблемы можно избежать, если можно заключить код в теги, сохраняющие пробелы, такие как «<pre> .. . </pre>» (для HTML ), «[code]» ... «[/code]» (для bbcode ) и т. д.

если  часы  <  24  ,  минуты  <  60  и  секунды  <  60 :  вернуть  True , иначе :  вернуть  False

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

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

Хаскелл

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

пусть c_1 = 1 c_2 = 2 в f x y = c_1 * x + c_2 * y                 

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

пусть { c_1 = 1 ; c_2 = 2 } в f x y = c_1 * x + c_2 * y             

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

Функция \ verb + isValidDate + проверка правильности даты \ Begin { code } isValidDate :: Date -> Bool isValidDate date = чч > = 0 && мм > = 0 && сс > = 0 && чч < 24 && мм < 60 && ss < 60 где ( hh , mm , ss ) = fromDate date \ end { code } обратите внимание , что в этом случае перегруженная функция — это \ verb + fromDate :: Date -> ( Int , Int , Int ) + .                                          

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

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

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

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

$search  =  массив ( 'a' ,  'b' ,  'c' ,  'd' ,  'e' ); $replacement  =  массив ( 'foo' ,  'bar' ,  'baz' ,  'quux' );// Другой пример:$значение  =  0 ; $другое значение  =  1 ; $yetanothervalue  =  2 ;

с:

$search  =  массив ( 'a' ,  'b' ,  'c' ,  'd' ,  'e' ); $replacement  =  массив ( 'foo' ,  'bar' ,  'baz' ,  'quux' );// Другой пример:$значение  =  0 ; $другое значение  =  1 ; $yetanothervalue  =  2 ;

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

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

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

$search  =  массив ( 'a' ,  'b' ,  'c' ,  'd' ,  'e' ); $r  =  массив ( 'foo' ,  'bar' ,  'baz' ,  'quux' );// Другой пример:$значение  =  0 ;  =  1 ; $yetanothervalue  =  2 ;

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

$search  =  массив ( 'a' ,  'b' ,  'c' ,  'd' ,  'e' ); $r  =  массив ( 'foo' ,  'bar' ,  'baz' ,  'quux' );// Другой пример: $значение  =  0 ;  =  1 ; $yetanothervalue  =  2 ;

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

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

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

интервал я ; for ( я = 0 ; я < 10 ; ++ я ){ printf ( "%d" , я * я + я ); }  

против

интервал я ; for ( я = 0 ; я < 10 ; ++ я ) { printf ( "%d" , я * я + я ); }               

Вкладки

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

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

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

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

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

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

class MyClass { int foobar ( int qux , // первый параметр int quux ); // второй параметр int foobar2 ( int qux , // первый параметр int quux , // второй параметр int quuux ); // третий параметр };              

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

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

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

Внешние ссылки