Стиль программирования
![]() | В данной статье поднимается несколько вопросов. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Стиль программирования , также известный как стиль кодирования или стиль кода , представляет собой набор правил или рекомендаций, которые управляют компоновкой исходного кода . Стиль программирования также может относиться к качественному аспекту кода, который интерпретируется субъективно.
Некоторые утверждают, что следование определенному стилю программирования помогает программистам читать и понимать код, а также избегать ошибок.
Книга «Элементы стиля программирования» , написанная в 1970-х годах, содержит примеры на Фортране и PL/I .
Стиль, используемый в конкретной базе кода, часто основан на соглашениях о кодировании компании или организации или предпочтениях программиста.
Стиль часто разрабатывается для конкретного языка программирования или семейства языков. Например, стиль, используемый для C, может не подходить для BASIC . Однако некоторые правила применяются ко многим языкам.
Автоматизация [ править ]
Доступны инструменты, которые форматируют исходный код, оставляя программистам возможность сосредоточиться на других аспектах, таких как логика и именование. Использование таких инструментов может сэкономить время разработки и достичь высокого уровня согласованности.
Аспекты стиля [ править ]
Аспекты стиля кода включают, помимо прочего:
- Отступы и другие пробелы
- Именование определяемых пользователем идентификаторов
- Использование заглавных букв ключевых слов (если это разрешено языком)
- Использование комментариев
Отступ [ править ]
Стиль отступов может помочь читателю по-разному, включая: идентификацию потока управления и блоков кода. В некоторых языках программирования отступы используются для разделения блоков кода и поэтому не являются вопросом стиля. В языках, которые игнорируют пробелы, отступы могут повлиять на читаемость.
Например, отформатированный в обычно используемом стиле:
if ( часы < 24 && минуты < 60 && секунды < 60 ) {
return true ;
} Еще {
вернуть ложь ;
}
Возможно, плохо отформатировано:
if ( часы < 24
&& минуты < 60
&& секунды < 60
)
{ return true
;} else
{ return false
;}
Известные стили отступов [ править ]
МодуЛик [ править ]
Стиль нулевого отступа ModuLiq группируется по пустой строке, а не по отступу.
Пример:
if ( часы < 24 && минуты < 60 && секунды < 60 )
возвращают true ;
иначе
вернуть ложь ;
Возьмите [ править ]
Lua не использует традиционные фигурные скобки или круглые скобки ; скорее, за выражением в условном операторе должен следовать then
, и блок должен быть закрыт с помощью end
.
если часы < 24 , минуты < 60 и секунды < 60 , тогда
верните true
, иначе
верните ложное
завершение
Отступы в Lua не являются обязательными. and
, or
, и not
функционируют как логические операторы.
Питон [ править ]
Python использует отступы для обозначения структуры управления , тем самым устраняя необходимость в скобках (т. е. {
и }
). С другой стороны, копирование и вставка кода Python может привести к проблемам, поскольку уровень отступа вставленного кода может не совпадать с уровнем отступа текущей строки. Такое переформатирование вручную может быть утомительным, но некоторые текстовые редакторы и IDE имеют функции, позволяющие делать это автоматически. Также возникают проблемы, когда код Python становится непригодным для использования при публикации на форуме или веб-странице, где удаляются пробелы, хотя этой проблемы можно избежать, если можно заключить код в теги, сохраняющие пробелы, такие как «<pre> .. . </pre>» (для HTML ), «[code]» ... «[/code]» (для bbcode ) и т. д.
если часы < 24 , минуты < 60 и секунды < 60 :
вернуть True
, иначе :
вернуть False
Обратите внимание, что Python начинает блок с двоеточия ( :
).
Программисты Python обычно следуют общепринятому руководству по стилю, известному как PEP8. [1] Существуют инструменты, предназначенные для автоматизации соблюдения требований PEP8.
Хаскелл [ править ]
Как и в Python, в 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:
Функция code \ verb + isValidDate + проверка правильности даты } Bool
\ Begin { isValidDate >
date :: Date -> isValidDate
&& = чч > = 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 date
Обратите внимание что в этом случае функцией перегруженной , является 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 ;
Пробел [ править ]
Язык свободного формата игнорирует пробелы: пробелы, табуляции и новые строки, поэтому программист может свободно стилизовать код по-разному, не затрагивая его смысл. Обычно программист использует стиль, который улучшает читаемость .
Следующие два фрагмента кода логически одинаковы, но отличаются пробелами.
интервал я ;
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 ); // третий параметр
};
См. также [ править ]
Ссылки [ править ]
- ^ «PEP 0008 — Руководство по стилю для кода Python» . python.org.