Стиль программирования
![]() | В этой статье есть несколько проблем. Пожалуйста, помогите улучшить его или обсудите эти проблемы на странице обсуждения . ( Узнайте, как и когда удалять эти шаблонные сообщения )
|
Стиль программирования , также известный как стиль кодирования , — это способ написания исходного кода , который приводит к появлению отличительных характеристик кода; результирующий стиль кода .
Многие считают, что последовательный стиль в базе кода является ценным; чтобы сделать код более удобным для чтения и поддержки . Часто программист следует рекомендациям по стилю с целью создания кода, который соответствует единому стилю не только в его работе, но и в работе всех тех, кто использует одни и те же рекомендации.
Рекомендации по стилю бывают разных форм. Они могут быть описаны в соглашениях по кодированию в стандарте , или программисты могут придерживаться общепринятых практик и стандартов де-факто . Рекомендации могут быть описательными, например, « пишите четко – не будьте слишком умными» , или предписывающими, например, отступ – 4 пробела . Различные книги, такие как «Элементы стиля программирования», содержат примеры стилей кода.
Как и стиль в целом, стиль кода можно описать как множество отдельных аспектов, таких как отступы, именование и использование заглавных букв.
Аспекты стиля кода часто используются в контексте определенного языка программирования или семейства языков. Аспект стиля, используемый для C, может не подходить для BASIC . Однако некоторые аспекты стиля применимы ко многим языкам.
Автоматизация
[ редактировать ]В некоторых случаях соблюдения стиля можно добиться с помощью программных средств . Инструмент форматирования кода позволяет программистам сосредоточиться на других аспектах, таких как логика и именование. Использование таких инструментов может привести к созданию более единообразного стиля кода с меньшими усилиями со стороны программистов.
Аспекты стиля
[ редактировать ]Аспекты стиля кода включают, помимо прочего:
- Отступы и другие пробелы
- Именование определяемых пользователем идентификаторов
- Использование заглавных букв ключевых слов (если это разрешено языком)
- Использование комментариев
Отступ
[ редактировать ]Стиль отступов может помочь читателю по-разному, включая: идентификацию потока управления и блоков кода. В некоторых языках программирования отступы используются для разделения блоков кода и поэтому не являются вопросом стиля. В языках, которые игнорируют пробелы, отступы могут повлиять на читаемость.
Например, отформатированный в обычно используемом стиле:
if (hours < 24 && minutes < 60 && seconds < 60) {
return true;
} else {
return false;
}
Возможно, плохо отформатировано:
if ( hours < 24
&& minutes < 60
&& seconds < 60
)
{return true
;} else
{return false
;}
Известные стили отступов
[ редактировать ]МодуЛик
[ редактировать ]Стиль нулевого отступа ModuLiq группируется по пустой строке, а не по отступу.
Пример:
if (hours < 24 && minutes < 60 && seconds < 60)
return true;
else
return false;
Два
[ редактировать ]Lua не использует традиционные фигурные скобки или круглые скобки ; скорее, за выражением в условном операторе должен следовать then
, и блок должен быть закрыт с помощью end
.
if hours < 24 and minutes < 60 and seconds < 60 then
return true
else
return false
end
Отступы в Lua не являются обязательными. and
, or
, и not
функционируют как логические операторы.
Питон
[ редактировать ]Python использует отступы для обозначения структуры управления , тем самым устраняя необходимость в скобках (т. е. {
и }
). С другой стороны, копирование и вставка кода Python может привести к проблемам, поскольку уровень отступа вставленного кода может не совпадать с уровнем отступа текущей строки. Такое переформатирование вручную может быть утомительным, но некоторые текстовые редакторы и IDE имеют функции, позволяющие делать это автоматически. Также возникают проблемы, когда код Python становится непригодным для использования при публикации на форуме или веб-странице, где удаляются пробелы, хотя этой проблемы можно избежать, если можно заключить код в теги, сохраняющие пробелы, такие как «<pre> .. . </pre>» (для HTML ), «[code]» ... «[/code]» (для bbcode ) и т. д.
if hours < 24 and minutes < 60 and seconds < 60:
return True
else:
return False
Обратите внимание, что Python начинает блок с двоеточия ( :
).
Программисты Python обычно следуют общепринятому руководству по стилю, известному как PEP8. [1] Существуют инструменты, предназначенные для автоматизации соблюдения требований PEP8.
Хаскелл
[ редактировать ]Как и в Python, в Haskell существует правило «вне игры». Он имеет двумерный синтаксис, в котором отступы имеют смысл для определения блоков (хотя в альтернативном синтаксисе используются фигурные скобки и точки с запятой).
Haskell — декларативный язык, в сценарии Haskell есть операторы, но есть объявления.
Пример:
let c_1 = 1
c_2 = 2
in
f x y = c_1 * x + c_2 * y
можно записать в одну строку так:
let {c_1=1;c_2=2}
in f x y = c_1 * x + c_2 * y
Haskell поощряет использование грамотного программирования , где расширенный текст объясняет происхождение кода.
В грамотных сценариях Haskell (названных lhs
расширение), все является комментарием, кроме блоков, помеченных как код.
Программу можно написать на LaTeX , в этом случае code
среда отмечает, что такое код.
Кроме того, каждый активный параграф кода можно пометить, предваряя его и заканчивая пустой строкой, а каждую строку кода начинать со знака «больше» и пробела.
Вот пример использования разметки LaTeX:
The function \verb+isValidDate+ test if date is valid
\begin{code}
isValidDate :: Date -> Bool
isValidDate date = hh>=0 && mm>=0 && ss>=0
&& hh<24 && mm<60 && ss<60
where (hh,mm,ss) = fromDate date
\end{code}
observe that in this case the overloaded function is \verb+fromDate :: Date -> (Int,Int,Int)+.
И пример использования обычного текста:
The function isValidDate test if date is valid
> isValidDate :: Date -> Bool
> isValidDate date = hh>=0 && mm>=0 && ss>=0
> && hh<24 && mm<60 && ss<60
> where (hh,mm,ss) = fromDate date
observe that in this case the overloaded function is fromDate :: Date -> (Int,Int,Int).
Вертикальное выравнивание
[ редактировать ]Некоторые программисты считают полезным выравнивать похожие элементы по вертикали (в виде таблиц или столбцов), ссылаясь на то, что это может сделать ошибки, возникающие из-за опечаток, более очевидными.
Например, без выравнивания:
$search = array('a', 'b', 'c', 'd', 'e');
$replacement = array('foo', 'bar', 'baz', 'quux');
$value = 0;
$anothervalue = 1;
$yetanothervalue = 2;
выровнено:
$search = array('a', 'b', 'c', 'd', 'e');
$replacement = array('foo', 'bar', 'baz', 'quux');
$value = 0;
$anothervalue = 1;
$yetanothervalue = 2;
В отличие от невыровненного кода, выровненный код подразумевает, что значения поиска и замены связаны, поскольку у них есть соответствующие элементы. Поскольку для поиска требуется больше значений, чем для замены, если это ошибка, ее с большей вероятностью можно будет обнаружить при визуальном осмотре.
К недостаткам вертикального выравнивания относятся:
- Зависимости между линиями, что приводит к нагрузке на обслуживание. Например, если добавлено длинное значение столбца, требующее более широкого столбца, то все строки таблицы должны быть изменены (чтобы сохранить табличную форму), что является более значительным изменением, которое приводит к дополнительным усилиям по просмотру и пониманию изменения. более поздняя дата
- Хрупкость: если программист неправильно отформатирует таблицу при внесении изменений, в результате получится визуальный беспорядок, который труднее читать, чем невыровненный код. Простые операции рефакторинга, такие как переименование, могут нарушить форматирование.
- Больше усилий по поддержанию, что может помешать программисту внести полезные изменения, например, улучшить имя идентификатора, поскольку это потребует значительных усилий по форматированию.
- Требование использования шрифтов фиксированной ширины; не пропорциональные шрифты
Поддержание выравнивания можно облегчить с помощью инструмента, обеспечивающего поддержку (например, эластичных табуляторов ), хотя это приводит к зависимости от таких инструментов.
Например, простые операции рефакторинга по переименованию «$replacement» в «$r» и «$anothervalue» в «$a» приводят к следующему:
$search = array('a', 'b', 'c', 'd', 'e');
$r = array('foo', 'bar', 'baz', 'quux');
$value = 0;
$a = 1;
$yetanothervalue = 2;
При невыровненном форматировании эти изменения не имеют такого драматичного, противоречивого или нежелательного эффекта:
$search = array('a', 'b', 'c', 'd', 'e');
$r = array('foo', 'bar', 'baz', 'quux');
$value = 0;
$a = 1;
$yetanothervalue = 2;
Белое пространство
[ редактировать ]Язык свободного формата игнорирует пробелы: пробелы, табуляции и новые строки, поэтому программист может свободно стилизовать код по-разному, не затрагивая его смысл. Обычно программист использует стиль, который улучшает читаемость .
Следующие два фрагмента кода логически одинаковы, но отличаются пробелами.
int i;
for(i=0;i<10;++i){
printf("%d",i*i+i);
}
против
int i;
for (i = 0; i < 10; ++i) {
printf("%d", i * i + i);
}
Использование табуляции для пробелов является спорным. Проблемы с выравниванием возникают из-за разных позиций табуляции в разных средах и смешанного использования табуляции и пробелов.
Например, один программист предпочитает четыре позиции табуляции , настроил свой набор инструментов таким образом и использует их для форматирования своего кода.
int ix; // Index to scan array
long sum; // Accumulator for sum
Другой программист предпочитает число табуляции, равное восьми, и его набор инструментов настроен таким образом. Когда кто-то другой изучает исходный код, ему вполне может быть трудно его читать.
int ix; // Index to scan array
long sum; // Accumulator for sum
Одним из широко используемых решений этой проблемы может быть запрет на использование табуляции для выравнивания или правила установки табуляции. Обратите внимание, что табуляции работают нормально, если они используются последовательно, ограничены логическими отступами и не используются для выравнивания:
class MyClass {
int foobar(
int qux, // first parameter
int quux); // second parameter
int foobar2(
int qux, // first parameter
int quux, // second parameter
int quuux); // third parameter
};
См. также
[ редактировать ]- MISRA C – стандарт разработки программного обеспечения для языка программирования C.
- Соглашение об именовании (программирование) - набор правил именования объектов в исходном коде и документации.
Ссылки
[ редактировать ]- ^ «PEP 0008 — Руководство по стилю для кода Python» . python.org.