Jump to content

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

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

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

Книга «Элементы стиля программирования» , написанная в 1970-х годах, содержит примеры на Фортране и PL/I .

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

Стиль часто разрабатывается для конкретного языка программирования или семейства языков. Например, стиль, используемый для 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
};

См. также [ править ]

Ссылки [ править ]

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

Внешние ссылки [ править ]

Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: 3679a5232ca27eb26c73cb15c58bf88a__1718317560
URL1:https://arc.ask3.ru/arc/aa/36/8a/3679a5232ca27eb26c73cb15c58bf88a.html
Заголовок, (Title) документа по адресу, URL1:
Programming style - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)