Стиль отступа

редактировать

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

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

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

Содержание
  • 1 Размещение скобок в составных операторах
  • 2 Табуляторы, пробелы и размер отступов
  • 3 Инструменты
  • 4 Стили
    • 4.1 Стиль KR
      • 4.1.1 Вариант: 1TBS (OTBS)
      • 4.1.2 Вариант: ядро ​​Linux
      • 4.1.3 Вариант: обязательные фигурные скобки
      • 4.1.4 Вариант: Java
      • 4.1.5 Вариант: Stroustrup
      • 4.1.6 Вариант: BSD KNF
    • 4.2 Стиль Allman
      • 4.2.1 Вариант: Allman-8
    • 4.3 Стиль Whitesmiths
    • 4.4 Стиль GNU
    • 4.5 Стиль Хорстманна
    • 4.6 Стиль Пико
    • 4.7 Стиль Рэтлиффа
    • 4.8 Стиль Lisp
    • 4.9 Стиль Haskell
  • 5 Другие соображения
    • 5.1 Потеря следа блоков
    • 5.2 Вставка оператора
  • 6 См. Также
  • 7 Ссылки
  • 8 Внешние ссылки
Размещение фигурных скобок в составных операторах

Основное различие между стилями отступов заключается в размещении фигурных скобок в составном операторе ({...}), который часто следует за управляющим оператором (if, а, для...). В таблице ниже показано это размещение стиля утверждений, обсуждаемого в этой статье; Другой случай - стиль объявления функции. Стиль размещения фигурных скобок в операторах может отличаться от стиля размещения фигурных скобок в определении функции. Для единообразия глубина отступа оставлена ​​постоянной на уровне 4 пробелов, независимо от предпочтительной глубины отступа для каждого стиля.

Размещение скобокСтили
while (x == y) {something (); что-то другое(); }
KR, Allman
while (x == y) {something (); что-то другое (); }
GNU
while (x == y) {something (); что-то другое(); }
Whitesmiths
while (x == y) {something (); что-то другое(); }
Хорстманн
while (x == y) {something (); что-то другое() ; }
Haskell
while (x == y) {something (); что-то другое(); }
Пико
while (x == y) {something (); что-то другое(); }
Рэтлифф
while (x == y) {something (); что-то другое(); }
Лисп
while (x == y) {something (); что-то другое(); }
KR вариант 1TBS
Табуляция, пробелы и размер отступов

Отображаемая ширина табуляции может быть установлена ​​на произвольные значения в большинстве программных редакторов, включая Notepad ++ (MS-Windows), TextEdit (MacOS / X), Emacs (unix), vi (unix) и nano (unix). Кроме того, эти редакторы можно настроить для создания комбинации табуляции и пробелов или для преобразования между табуляцией и пробелами, чтобы соответствовать определенным схемам отступов. В unix ширину табуляции также можно установить в pager, например, less, и преобразовать на лету с помощью фильтров, таких как expand / undepand.

Редакторы Unix по умолчанию размещают вкладки с интервалом в восемь столбцов, в то время как в средах Macintosh и MS-Windows по умолчанию используются четыре столбца. Это различие вызывает несовпадение исходного кода, когда отступ, в котором сочетаются табуляции и пробелы, отображается в конфигурации, в которой табуляции отображаются иначе, чем в конфигурации автора.

Среди программистов продолжаются споры о выборе между жесткими табуляциями и пробелами. Многие ранние программисты использовали символы табуляции для отступа, для облегчения набора текста и для экономии размера исходного файла. Некоторые программисты, такие как Джейми Завински, заявляют, что использование пробелов вместо табуляции увеличивает кроссплатформенность переносимость. Другие, например разработчики стандартов кодирования WordPress, утверждают обратное: жесткие вкладки повышают переносимость. Обзор 400 000 ведущих репозиториев на GitHub показал, что пробелы встречаются чаще.

Размер отступа обычно не зависит от стиля. Эксперимент, проведенный над кодом PASCAL в 1983 году, показал, что размер отступа существенно влияет на понятность. Оптимальными оказались отступы от 2 до 4 символов. Для Ruby, многих языков сценариев оболочки и некоторых форм форматирования HTML обычно используется два пробела на уровень отступа.

Инструменты

Существует множество инструментов для преобразования между стилями отступа, например indent , программа, включенная во многие Unix-like операционные системы..

В Emacs доступны различные команды для автоматического исправления проблем с отступами, включая нажатие Tabна заданной строке (в конфигурации по умолчанию). M-x indent-regionможно использовать для правильного отступа больших участков кода. В зависимости от режима Emacs может также заменять ведущие пробелы отступа на нужное количество табуляций, за которыми следуют пробелы, что приводит к минимальному количеству символов для отступа каждой исходной строки.

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

Стили

Стиль KR

Стиль KR (стиль Керниган и Ричи), который на хакерском жаргоне также называется «стиль единой скобки» (сокращенно 1TBS), обычно используется в C, C ++ и других языках программирования фигурных скобок. Это был стиль исходного ядра Unix, Керниган и книги Ричи Язык программирования C, а также Керниган и Плугер книга Элементы стиля программирования.

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

Блоки внутри функции, однако, имеют открывающие фигурные скобки на той же строке, что и соответствующие операторы управления; закрывающие фигурные скобки остаются в отдельной строке, если за ними не следует ключевое слово elseили в то время как. Такие не- выровненные фигурные скобки получили название «египетские скобки» (или «египетские скобки») за их сходство с руками в некоторых причудливых позах древних египтян.

int main (int argc, char * argv) {... а (х == у) {что-то (); что-то другое(); если (some_error) do_correct (); иначе continue_as_usual (); } finalthing ();...}

Язык программирования C явно не определяет этот стиль, хотя он последовательно используется на протяжении всей книги. Из книги:

Положение подтяжек менее важно, хотя люди придерживаются страстных убеждений. Мы выбрали один из нескольких популярных стилей. Выберите стиль, который вам подходит, а затем используйте его постоянно.

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

/ * Исходный стиль C до ISO без прототипов функций * / int основной (argc, argv) int argc; char * argv; {...}

Вариант: 1TBS (OTBS)

Сторонники этого стиля иногда называют его «единственным истинным стилем скобок» (сокращенно 1TBS или OTBS). Два основных отличия от стиля KR заключаются в том, что открывающие фигурные скобки функций находятся в одной строке, разделенные пробелом, и что фигурные скобки не опускаются для управляющего оператора, имеющего только один оператор в его области действия.

В этом стиле конструкции, которые позволяют вставлять новые строки кода, находятся на отдельных строках, а конструкции, запрещающие вставки, находятся на одной строке. Этот принцип усиливается путем закрепления всех if, else, while и т. Д., Включая однострочные условные выражения, так что вставка новой строки кода в любом месте всегда безопасна (т. Е. Такая вставка не приведет к несогласованию потока выполнения с отступ исходного кода).

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

void checknegative (x) {if (x < 0) { puts("Negative"); } else { nonnegative(x); } }

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

Вариант: ядро ​​Linux

Второстепенным вариантом стиля KR является стиль ядра Linux, который широко используется в дереве исходных текстов ядра Linux. Линус Торвальдс настоятельно рекомендует всем участникам следовать ему. Стиль заимствует многие элементы из KR:

В стиле ядра используются позиции табуляции (с позициями табуляции каждые 8 символов) для отступа. Открывающие фигурные скобки функции переходят в начало строки, следующей за заголовком функции. Любые другие открывающие фигурные скобки располагаются в той же строке, что и соответствующее состояние. мент, разделенный пробелом. Метки в операторе switchвыровнены с охватывающим блоком (имеется только один уровень отступов). Тело составного оператора, состоящее из одного оператора (например, if, while и do-while), не обязательно должно заключаться в фигурные скобки. Если, однако, для одного или нескольких подвыполнений в операторе if-elseтребуются фигурные скобки, тогда оба подзапроса следует заключить в фигурные скобки. Длина строки ограничена 80 символами.

Стиль ядра Linux определяет, что «если только одна ветвь условного оператора является одним оператором... используйте фигурные скобки в обеих ветвях»:

int power (int x, int y) {int результат; if (y < 0) { result = 0; } else { result = 1; while (y-->0) результат * = x; } вернуть результат; }

Вариант: обязательные фигурные скобки

Некоторые выступают за обязательные фигурные скобки для управляющих операторов только с одним оператором в своей области действия, т. Е. Закрепление всех if, else, while и т. Д., Включая однострочные условные выражения, поэтому что вставка новой строки кода в любом месте всегда безопасно (то есть такая вставка не приведет к несогласию потока выполнения с отступом исходного кода).

Стоимость этого стиля состоит в том, что для последнего блока требуется одна дополнительная полная строка (за исключением промежуточных блоков в конструкциях if / else if / else и блоках do / while).

Вариант: Java

Хотя Java иногда пишется в других стилях, значительная часть кода Java использует второстепенный вариант стиля KR в котором открывающая скобка находится в одной строке не только для блоков внутри функции, но и для объявлений классов или методов. Этот стиль широко распространен в основном потому, что Sun Microsystems в исходных руководствах по стилю использовали этот вариант KR, и, как результат, большая часть стандартного исходного кода для Java API написано в этом стиле. Это также популярный стиль отступов для ActionScript и JavaScript, наряду с стилем Allman.

Variant: Stroustrup

Stroustrup style is Адаптация Бьярна Страуструпа стиля KR для C ++, используемого в его книгах, таких как Programming: Principles and Practice using C ++ and The C ++ Programming Language.

В отличие от вариантов выше, Страуструп не использует «Обнимались еще». Таким образом, Страуструп напишет

if (x < 0) { puts("Negative"); negative(x); } else { puts("Non-negative"); nonnegative(x); }

Страуструп расширяет стиль KR для классов, записывая их следующим образом:

class Vector {public: Vector (int s): elem (new double [s]), sz (s) {} // создаем Vector double operator (int i) {return elem [i];} // доступ к элементу: индексирование int size () {return sz;} private: double * elem; // указатель на elements int sz; // количество элементов};

Страуструп не отступает от меток public:и private:. Кроме того, в этом стиле, в то время как открывающая скобка функция начинается с новой строки, открывающая скобка класса находится в той же строке, что и имя класса.

Stroustrup позволяет писать короткие функции на одной строке. Stroustrup style - это именованный стиль отступа, доступный в редакторе Emacs. Страуструп поддерживает макет стиля, производный от KR, с помощью C ++, как указано в его современных рекомендациях по ядру C ++.

Вариант: BSD KNF

Также называется Kernel Normal Форма, это форма большей части используемого кода i в операционных системах Berkeley Software Distribution (BSD). Хотя в основном он предназначен для кода ядра, он также широко используется в коде пользовательской среды. По сути, это тщательно документированный вариант стиля KR, который используется в исходном коде Bell Labs версии 6 и 7 Unix.

Ядро SunOS и среда пользователя используют аналогичный стиль отступов. Как и KNF, он также был основан на документах в стиле ATT и иногда называется нормальной формой Билла Джоя. Руководство SunOS было опубликовано в 1996 году; Кратко обсуждается ANSI C. Правильность отступа в списке исходных файлов может быть проверена программой cstyle, написанной Биллом Шенноном.

В этом стиле жесткий табулятор (ts в vi ) сохраняется в восемь столбцов, в то время как программный табулятор часто определяется также как помощник (sw в vi) и устанавливается на четыре. Жесткие табуляторы используются для отступов блоков кода, в то время как мягкие табуляторы (четыре пробела) с дополнительным отступом используются для всех продолжающихся строк, которые должны быть разделены на несколько строк.

Более того, в вызовах функций не используется пробел перед круглыми скобками, хотя собственные операторы языка C, такие как if, , в то время как, do, switchи возвращают, делают (в случае где returnиспользуется с скобками). Функции, которые не объявляют никаких локальных переменных в блоке верхнего уровня, также должны оставлять пустую строку после открывающей скобки блока.

Вот несколько примеров:

while (x == y) {something (); что-то другое(); } finalthing ();
if (data! = NULL res>0) {if (JS_DefineProperty (cx, o, "data", STRING_TO_JSVAL (JS_NewStringCopyN (cx, data, res)), NULL, NULL, JSPROP_ENUMERATE)! = 0) { QUEUE_EXCEPTION («Внутренняя ошибка!»); goto err; } PQfreemem (данные); } else {if (JS_DefineProperty (cx, o, "данные", OBJECT_TO_JSVAL (NULL), NULL, NULL, JSPROP_ENUMERATE)! = 0) {QUEUE_EXCEPTION («Внутренняя ошибка!»); goto err; }}
статический JSBool pgresult_constructor (JSContext * cx, JSObject * obj, uintN argc, jsval * argv, jsval * rval) {QUEUE_EXCEPTION («Класс PGresult не может быть создан пользователем»); возврат (JS_FALSE); }

Стиль Allman

Стиль Allman назван в честь Эрика Аллмана. Его также иногда называют стилем BSD, поскольку Аллман написал множество утилит для BSD Unix (хотя это не следует путать с другим «стилем BSD KNF»; см. Выше).

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

в то время как (x == y) {что-то (); что-то другое(); } finalthing ();

Этот стиль аналогичен стандартному отступу, используемому в языках Pascal и Transact-SQL, где фигурные скобки эквивалентны ключевым словам beginи end.

(* Пример стиля отступа кода Allman на Паскале *) procedure dosomething (x, y: Integer); начать, пока x = y действительно начать что-то (); что-то другое(); конец; конец;

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

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

// while (x == y) {something (); что-то другое(); }

Как это:

// for (int i = 0; i < x; i++) // while (x == y) if (x == y) { something(); somethingelse(); }

Даже так, с условной компиляцией:

int c; #ifdef HAS_GETCH while ((c = getch ()) ! = EOF) #else while ((c = getchar ())! = EOF) #endif {do_something (c);}

Вариант: Allman-8

Популярный вариант для использования в образовании, Allman-8 использует вкладки с отступом в 8 пробелов и ограничение в 80 столбцов варианта ядра Linux для KR. Этот стиль якобы помогает улучшить читаемость на проекторах. Кроме того, размер отступа и ограничение столбца помогают создать визуальный сигнал для выявления чрезмерной вложенности Блоки кода. Эти преимущества в совокупности помогают новым разработчикам и учащимся неявно управлять сложностью кода.

Стиль Whitesmiths

Стиль Whitesmiths, также иногда называемый стилем Wishart, первоначально использовался в документации для первого коммерческого компилятора C, Whitesmiths Compiler. Он был также популярен в первые дни Windows, так как он использовался в трех влиятельных программах Windows из книг Петцольда и Нортона и Яо

Whitesmiths, наряду с Allman, были наиболее распространенными стилями распорок с одинаковой популярностью в соответствии с Jargon File.

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

в то время как (x == y) {что-то (); что-то другое(); } finalthing ();

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

Пример:

if (data! = NULL res>0) {if (! JS_DefineProperty (cx, o, "data", STRING_TO_JSVAL (JS_NewStringCopyN (cx, data, res)), NULL, NULL, JSPROP_ENUMERATE)) {QUEUE_EXCEPTION («Внутренняя ошибка!»); goto err; } PQfreemem (данные); } else if (! JS_DefineProperty (cx, o, «данные», OBJECT_TO_JSVAL (NULL), NULL, NULL, JSPROP_ENUMERATE)) {QUEUE_EXCEPTION («Внутренняя ошибка!»); goto err; }

else ifобрабатываются как инструкция, как и инструкция препроцессора #elif.

Стиль GNU

Подобно стилям Allman и Whitesmiths, стиль GNU помещает фигурные скобки в строку отдельно с отступом двумя пробелами, кроме случаев открытия определения функции, где они не имеют отступа. В любом случае содержащийся код отделяется двумя пробелами от фигурных скобок.

Популяризованный Ричардом Столменом, на макет может повлиять его опыт написания кода Lisp. В Lisp эквивалент блока (progn) - это первоклассный объект данных, и предоставление ему собственного уровня отступа помогает подчеркнуть это, тогда как в C блок - это только синтаксис. Этот стиль также можно найти в некоторых учебниках по языкам программирования ALGOL и XPL 1960-х и 1970-х годов. Хотя это не связано напрямую с отступом, стиль кодирования GNU также включает пробел перед заключенным в скобки списком аргументов функции.

статический символ * concat (char * s1, char * s2) {while (x == y) {something (); что-то другое (); } finalthing (); }

Этот стиль сочетает в себе преимущества Allman и Whitesmiths, тем самым устраняя возможный недостаток Whitesmiths, заключающийся в том, что скобы не выделяются из блока. Одним из недостатков является то, что конечная скобка больше не совпадает с утверждением, которому она концептуально принадлежит. Другой возможный недостаток заключается в том, что при использовании двух визуальных уровней отступов для одного концептуального уровня это может тратить впустую пространство, но на самом деле это маловероятно, потому что в системах с одноуровневым отступом каждый уровень обычно состоит не менее чем из 4 пробелов, как 2 * 2 пробела в стиле GNU.

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

GNU Emacs текстовый редактор и команда GNU systems indent по умолчанию переформатируют код в соответствии с этим стилем. Те, кто не использует GNU Emacs или аналогичные расширяемые / настраиваемые редакторы, могут обнаружить, что настройки автоматического отступа в их редакторе бесполезны для этого стиля. Однако многие редакторы, по умолчанию использующие стиль KNF, хорошо справляются со стилем GNU, когда ширина табуляции установлена ​​равной двум пробелам; аналогично GNU Emacs хорошо адаптируется к стилю KNF, просто задав для ширины табуляции восемь пробелов. В обоих случаях автоматическое переформатирование разрушает исходный интервал, но автоматический отступ строк будет работать правильно.

Стив МакКоннелл в своей книге Code Complete советует не использовать этот стиль: он отмечает образец кода, в котором он используется, значком «Coding Horror», символизирующим особо опасный код, и заявляет что это мешает читаемости. Документация по стилю кодирования ядра Linux также настоятельно рекомендует не использовать этот стиль, побуждая читателей записывать копию стандартов кодирования GNU как «отличный символический жест».

Стиль Хорстмана

Издание 1997 года «Вычислительные концепции с помощью C ++ Essentials» Кея С. Хорстманна адаптирует Allman, помещая первый оператор блока в ту же строку, что и открывающая фигурная скобка. Этот стиль также используется в примерах в Jensen and Wirth's Pascal User Manual and Report.

while (x == y) {something (); что-то другое(); //... if (x < 0) { printf("Negative"); negative(x); } else { printf("Non-negative"); nonnegative(x); } } finalthing();

Этот стиль сочетает в себе преимущества Allman, сохраняя вертикальное выравнивание фигурных скобок для удобства чтения и легко идентифицируя блоки, с сохранением строки стиля KR. Однако в версии 2003 года теперь используется стиль Allman.

Стиль Pico

Это стиль, наиболее часто используемый его дизайнерами в языке Pico. Pico не имеет возврата операторов, и использует точки с запятой в качестве разделителей операторов вместо разделителей. Это дает следующий синтаксис:

stuff (n): {x: 3 * n; y: doStuff (x); y + x}

Преимущества и недостатки аналогичны преимуществам и недостаткам сохранения площади экрана с помощью стиля KR. Дополнительным преимуществом является то, что начальная и закрывающая фигурные скобки согласованы в приложении (обе разделяют пространство со строкой кода) по сравнению со стилем KR, где одна фигурная скобка разделяет пространство со строкой кода, а одна фигурная скобка занимает одну строку.

Стиль Рэтлиффа

В книге «Программисты за работой» К. Уэйн Рэтлифф обсуждал использование st yle ниже. Стиль начинается примерно так же, как 1TBS, но затем закрывающая скобка совпадает с отступом вложенного блока. Рэтлифф был первым программистом популярных dBase -II и -III языков программирования четвертого поколения. Он указал, что изначально это было задокументировано в материалах Digital Research Inc. Этот стиль иногда называют стилем баннера, возможно, из-за сходства со знаменем, висящим на шесте. В этом стиле, который относится к Whitesmiths, как KR относится к Allman, закрывающий элемент управления имеет отступ как последний элемент в списке (и, таким образом, теряет заметность). Этот стиль может облегчить визуальное сканирование для некоторых, поскольку заголовки любого блока - единственное, что расширяется на этом уровне (теория заключается в том, что контроль закрытия предыдущего блока мешает визуальному потоку заголовка следующего блока в KR и Стили Allman). Керниган и Плаугер используют этот стиль в коде Ratfor в Software Tools.

// В C for (i = 0; i < 10; i++) { if (i % 2 == 0) { doSomething(i); } else { doSomethingElse(i); } }

или на языке разметки...

{| | - | много материал... еще материал || альтернатива для коротких строк || и т. д. |} {| | -... и т.д. |}

Стиль Лиспа

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

// В C for (i = 0; i < 10; i++) {if (i % 2 == 0) {doSomething(i);} else {doSomethingElse(i); doThirdThing(i);}}
# В Python для i в диапазоне (10): if i% 2 == 0: do_something (i) else: do_something_else (i) do_third_thing (i)
;; В Лиспе (dotimes (i 10) (if (= (rem i 2) 0) (do-something i) (progn (do-something-else i) (do -third-thing i))))

Стиль Haskell

Макет Haskell может сделать размещение фигурных скобок необязательным, хотя фигурные скобки и точки с запятой разрешены в языке. Два приведенных ниже сегмента одинаково приемлемы для компилятора:

braceless = do text <- getContents let firstWord = head $ words text bigWord = map toUpper firstWord putStrLn bigWord braceful = do { text <- getContents ; let { firstWord = head $ words text ; bigWord = map toUpper firstWord } ; putStrLn bigWord }

В Haskell раскладка может заменять фигурные скобки. Обычно фигурные скобки и точки с запятой опускаются для процедурных разделов doи текста программы в целом, но этот стиль обычно используется для списков, записей и других синтаксических элементов, состоящих из пары скобок или фигурных скобок, которые разделены через запятую или точку с запятой. Если код после ключевых слов , где, letили изопускает фигурные скобки и точки с запятой, то отступ имеет значение.

Прочие соображения

Потеря отслеживания блоков

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

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

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

В текстовых редакторах семейства vi одно из средств отслеживания границ блока - это навести текстовый курсор на одну из фигурных скобок и нажать клавишу %. Курсор переместится на противоположную скобку. Поскольку клавиша следующийтекстового курсора (т.е. клавиша n) сохраняла информацию о направлении (независимо от того, была ли клавиша вверхили внизранее нажатой), макрос точки (клавиша .) затем может быть использован для размещения текстового курсора на следующей скобке с учетом подходящего стиля кодирования. Вместо этого можно использовать проверку границ блока с помощью ключа %для обеспечения соблюдения стандарта кодирования.

Другой способ - использовать встроенные комментарии, добавленные после закрывающей фигурной скобки:

for (int i = 0; i < total; i++) { foo(bar); } //for (i)
if (x < 0) { bar(foo); } //if (x < 0)

) Основным недостатком этого метода является сохранение дублирующегося кода в в нескольких местах.

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

Вставка оператора

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

for (int i = 0; i < 10; i++) whoops(bar); /* repeated 10 times, with i from 0 to 9 */ { only_once(); /* Programmer intended this to be done 10 times */ } //for (i) ← This comment is no longer valid, and is very misleading!

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

См. также
Ссылки
Внешние ссылки

Последняя правка сделана 2021-05-23 13:10:55
Содержание доступно по лицензии CC BY-SA 3.0 (если не указано иное).
Обратная связь: support@alphapedia.ru
Соглашение
О проекте