~~~~~~~~~~~~~~~~~~~~ Arc.Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~ 
Номер скриншота №:
✰ BFE98422790E467C3EE48F529236C058__1717895400 ✰
Заголовок документа оригинал.:
✰ Indentation style - Wikipedia ✰
Заголовок документа перевод.:
✰ Стиль отступов — Википедия ✰
Снимок документа находящегося по адресу (URL):
✰ https://en.wikipedia.org/wiki/Indent_style ✰
Адрес хранения снимка оригинал (URL):
✰ https://arc.ask3.ru/arc/aa/bf/58/bfe98422790e467c3ee48f529236c058.html ✰
Адрес хранения снимка перевод (URL):
✰ https://arc.ask3.ru/arc/aa/bf/58/bfe98422790e467c3ee48f529236c058__translat.html ✰
Дата и время сохранения документа:
✰ 21.06.2024 10:38:17 (GMT+3, MSK) ✰
Дата и время изменения документа (по данным источника):
✰ 9 June 2024, at 04:10 (UTC). ✰ 

~~~~~~~~~~~~~~~~~~~~~~ Ask3.Ru ~~~~~~~~~~~~~~~~~~~~~~ 
Сервисы Ask3.ru: 
 Архив документов (Снимки документов, в формате HTML, PDF, PNG - подписанные ЭЦП, доказывающие существование документа в момент подписи. Перевод сохраненных документов на русский язык.)https://arc.ask3.ruОтветы на вопросы (Сервис ответов на вопросы, в основном, научной направленности)https://ask3.ru/answer2questionТоварный сопоставитель (Сервис сравнения и выбора товаров) ✰✰
✰ https://ask3.ru/product2collationПартнерыhttps://comrades.ask3.ru


Совет. Чтобы искать на странице, нажмите Ctrl+F или ⌘-F (для MacOS) и введите запрос в поле поиска.
Arc.Ask3.ru: далее начало оригинального документа

Стиль отступов — Википедия Jump to content

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

Из Википедии, бесплатной энциклопедии
(Перенаправлено из стиля отступа )

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

Обзор [ править ]

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

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

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

Стиль отступов применяется только к текстовым языкам. В языках визуального программирования нет отступов.

Исследования [ править ]

Несмотря на повсеместное использование стилей отступов, их ценность мало исследована. Первые эксперименты, проведенные Вейсманом в 1974 году, не показали никакого эффекта. [1] В 2023 году эксперимент Морцека и др. [2] показал значительный положительный эффект для вложенных if операторы, в которых для чтения кода без отступов требуется в среднем на 179 % больше времени, чем для кода с отступом.

Известные стили [ править ]

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

Пример Имя
в то время как   (  Икс   ==   y  ) 
 { 
     Foo  (); 
      бар  (); 
  } 
Оллман
в то время как   (  Икс   ==   y  ) 
   { 
     Foo  (); 
      бар  (); 
    } 
ГНУ
в то время как   (  Икс   ==   y  ) 
     { 
     Foo  (); 
      бар  (); 
      } 
Кузнецы
в то время как   (  Икс   ==   y  )   { 
     Foo  (); 
      бар  (); 
  } 
К&Р
в то время как   (  Икс   ==   y  )   { 
     Foo  (); 
      бар  (); 
      } 
Рэтлифф
в то время как   (  Икс   ==   y  ) 
 {     Foo  (); 
      бар  (); 
  } 
Хорстманн
в то время как   (  Икс   ==   y  ) 
 {     Foo  (); 
      бар  ();    } 
Пико
в то время как   (  Икс   ==   y  ) 
   {   Foo  (); 
      бар  ();    } 
Лисп
#define W(c,b) { while(c){b}} 
 W  (  x  ==  y  ,  s  ();  se  ();) 
АПЛ
в то время как   x   ==   y  : 
     foo  () 
     bar  () 
Питон

Стили C/C++ [ править ]

Атрибуты C , C++ и других стилей кодирования языков программирования с фигурными скобками включают, помимо прочего:

  • Размещение фигурных скобок относительно других элементов кода.
  • Использование табуляции или пробелов
  • Заключение блоков с одним оператором в фигурные скобки. Сторонники ссылаются на то преимущество, что полученный код более безопасен, поскольку вставка оператора не может привести к потоку управления, не согласующемуся с отступами. Указанным недостатком является то, что код длиннее, поскольку для закрывающей скобки блока требуется одна строка (за исключением else if построить и do{}while блокировать).

К&Р [ править ]

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

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

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

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

Пример кода:

int   main  (  int   argc  ,   char   *  argv  []) 
 { 
     while   (  x   ==   y  )   { 
         do_something  (); 
          do_something_else  (); 
          если   (  some_error  ) 
             fix_issue  ();    // блок с одним оператором без фигурных скобок 
         else 
             continue_as_usual  (); 
      } 
     Final_thing  (); 
  } 

Египетские брекеты [ править ]

Несоосные скобки многострочных блоков получили прозвище «египетские скобки» (или «египетские скобки») за сходство с руками в некоторых причудливых позах древних египтян. [3] [4] [5]

Отдельные заявления [ править ]

Блок с одним оператором не имеет фигурных скобок, что является причиной ошибок, которые легко пропустить, таких как ошибка goto error .

One True Brace [ править ]

Единственный настоящий стиль брекетов [6] (сокращенно 1TBS или OTBS [7] ) похож на стиль K&R, но функции форматируются как блоки с несколькими операторами, с открывающей скобкой на той же строке, что и объявление, а фигурные скобки не опускаются для блока с одним оператором. [8]

bool   is_negative  (  int   x  )   { 
     if   (  x   <   0  )   { 
         return   true  ; 
      }   Еще   { 
         вернуть   ложь  ; 
      } } 
 } 

Хотя это и не требуется для таких языков, как C/C++, использование фигурных скобок для блоков с одним оператором гарантирует, что вставка оператора не приведет к тому, что поток управления не будет противоречить отступам, как это видно, например, в печально известной ошибке goto error от Apple .

Указанные преимущества включают более короткий код (чем K&R), поскольку начальная фигурная скобка не требует дополнительной строки, а конечная фигурная скобка соответствует оператору, которому она концептуально принадлежит. Одна из издержек этого стиля заключается в том, что завершающая скобка добавляет строку, что может быть частично разрешено в блоках if/else и do/ while.

Источники расходятся во мнениях относительно значения One True Brace Style. Некоторые говорят, что это указанный здесь вариант, [8] в то время как другие говорят, что это «хакерский жаргон» для K&R. [9]

Ядро Linux [ править ]

Дерево исходного кода ядра Linux выполнено в стиле K&R. [10] Линус Торвальдс советует участникам следовать ему. Атрибуты включают в себя:

  • Использует символы табуляции для отступов (не пробелы) и предполагает, что табуляция осуществляется через каждые 8 ​​пробелов.
  • Макет скобок соответствует K&R с open и close на отдельных строках и с несколькими операторами open в той же строке, что и управляющее предложение, разделенными пробелом.
  • Этикетки в switch оператор выравнивается с окружающим блоком (есть только один уровень отступов)
  • Максимальная длина строки – 100 символов, хотя до 2020 года предпочтительнее использовать ограничение в 80 символов. [11]
  • Тело составного оператора, состоящее из одного оператора (например, if, while и do- while ), не обязательно заключать в фигурные скобки. Однако если один или несколько подвыражений в if-else оператору требуются фигурные скобки, то оба подоператора должны быть заключены в фигурные скобки:
int   power  (  int   x  ,   int   y  ) 
 { 
         int   result  ; 

          если   (  y   <   0  )   { 
                 результат   =   0  ; 
          }   Еще   { 
                 результат   =   1  ; 
                  while   (  y  --   >   0  ) 
                         результат   *=   x  ; 
          } 
         вернуть   результат  ; 
  } 

Ява [ править ]

Значительная часть кода Java использует вариант стиля K&R, в котором открывающая скобка находится на одной строке не только для блоков внутри функции, но также для объявлений классов или методов. Этот стиль широко распространен во многом благодаря Sun Microsystems. оригинальным руководствам по стилю компании [12] [13] [14] использовал этот вариант K&R, и в результате большая часть стандартного исходного кода Java API написана в этом стиле. Это также популярный стиль отступов для ActionScript и JavaScript , наряду со стилем Allman .

Страуструп [ править ]

Бьёрн Страуструп адаптировал стиль K&R для C++ в своих книгах, таких как « Программирование: принципы и практика с использованием C++» и «Язык программирования C++» . [15]

В отличие от приведенных выше вариантов, Страуструп не использует «обнимающееся еще». Таким образом, Страуструп писал [15]

    if   (  x   <   0  )   { 
         puts  (  «Отрицательный»  ); 
          отрицательный  (  х  ); 
      } 
     else   { 
         puts  (  "Неотрицательный"  ); 
          неотрицательный  (  x  ); 
      } 

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

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

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

Страуструп позволяет писать короткие функции в одной строке. Стиль Страуструпа — это именованный стиль отступов, доступный в редакторе Emacs . Страуструп поощряет использование C++ в стиле K&R, как указано в его современном C++ Core Guidelines . [16]

БСД КНФ [ править ]

В операционных системах Berkeley Software Distribution (BSD) используется стиль, который иногда называют нормальной формой ядра (KNF). Хотя в основном он предназначен для кода ядра, он также широко используется в пользовательском коде. По сути, это тщательно документированный вариант стиля K&R, который используется в исходном коде Unix версий 6 и 7 Bell Labs . [17]

Ядро SunOS и пользовательское пространство используют аналогичный стиль отступов. [17] Как и KNF, он также был основан на документах в стиле AT&T и иногда называется нормальной формой Билла Джоя. [18] Рекомендации SunOS были опубликованы в 1996 году; ANSI C обсуждается кратко. Правильность отступов списка исходных файлов можно проверить с помощью программы cstyle , написанной Биллом Шенноном. [17] [18] [19]

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

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

Примеры:

while   (  x   ==   y  )   { 
         что-то  (); 
          что-то другое  (); 
  } 
 Final_thing  (); 
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  (  " Внутренняя ошибка!"  ); 
                  перейти   к ошибке  ; 
          } 
         PQfreemem  (  данные  ); 
  }   else   { 
         if   (  JS_DefineProperty  (  cx  ,   o  ,   "data"  ,   OBJECT_TO_JSVAL  (  NULL  ), 
             NULL  ,   NULL  ,   JSPROP_ENUMERATE  )   !=   0  )   { 
                 QUEUE_EXCEPTION  (  "Внутренняя ошибка!"  ); 
                  перейти   к ошибке  ; 
          } 
 } 
static   JSBool 
 pgresult_constructor  (  AOContext   *  cx  ,   JSObject   *  obj  ,   uintN   argc  , 
     jsval   *  argv  ,   jsval   *  rval  ) 
 { 

         QUEUE_EXCEPTION  (  «Класс PGresult не может быть создан пользователем»  ); 

          возврат   (  JS_FALSE  ); 
  } 

Оллман [ править ]

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

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

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

 Final_thing  (); 

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

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

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

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

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

Как это:

// for (int i=0; i < x; i++) 
 // while (x == y) 
 if   (  x   ==   y  ) 
 { 
     Something  (); 
      что-то другое  (); 
  } 

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

    интервал   с  ; 
  #ifdef HAS_GETCH 
     while   ((  c   =   getch  ())   !=   EOF  ) 
 #else 
     while   ((  c   =   getchar  ())   !=   EOF  ) 
 #endif 
     { 
         do_something  (  c  ); 
      } 

Вариант: Оллман-8 [ править ]

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

Кузнецы [ править ]

Стиль Whitesmiths, также иногда называемый стилем Wishart, первоначально использовался в документации для первого коммерческого компилятора C, Whitesmiths Compiler. Он также был популярен на заре существования Windows, поскольку использовался в трех влиятельных книгах по программированию для Windows: «Руководство программиста по Windows» , Дюранта Карлсона и Яо , « Программирование Windows» и Нортона « Техники мощного программирования Windows 3.0» и Петцольда Яо.

утверждал, что Уайтсмиты, наряду с Оллманом , были наиболее распространенными стилями крепления В 1991 году журнал Jargon File и имели примерно такую ​​же популярность в то время. [9] [20]

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

Как и в стиле Рэтлиффа, закрывающая скобка имеет такой же отступ, как и операторы внутри фигурных скобок. [21]

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

 Final_thing  (); 

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

Пример:

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  (  "Внутренняя ошибка) !"  ); 
          перейти   к ошибке  ; 
          } 
     PQfreemem  (  данные  ); 
      } 
 else   if   (  !  JS_DefineProperty  (  cx  ,   o  ,   "data"  ,   OBJECT_TO_JSVAL  (  NULL  ),   NULL  ,   NULL  ,   JSPROP_ENUMERATE  )) 
     { 
     QUEUE_EXCEPTION  (  "Внутренняя ошибка!"  ); 
      перейти   к ошибке  ; 
      } 

else if рассматриваются как утверждение, во многом аналогично #elif заявление препроцессора.

ГНУ [ править ]

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

На макет, популяризированный Ричардом Столлманом , может повлиять его опыт написания кода на Lisp . [23] В Лиспе эквивалентом блока (программы) является объект данных первого класса, и присвоение ему собственного уровня отступов помогает подчеркнуть это, тогда как в C блок — это всего лишь синтаксис. Этот стиль также можно найти в некоторых учебниках по языкам программирования ALGOL и XPL 1960-х и 1970-х годов. [24] [25] [ обсуждать ]

Хотя это и не отступ как таковой, стиль кодирования GNU также включает пробел после имени функции – перед левой скобкой в ​​списке аргументов. [22]

static   char   * 
 concat   (  char   *  s1  ,   char   *  s2  ) 
 { 
   while   (  x   ==   y  ) 
     { 
       Something   (); 
        что-то другое   (); 
      } 
   Final_thing   (); 
  } 

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

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

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

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

Horstmann[editХорстманн

Издание 1997 года « Концепции вычислений с основами C++» Кея С. Хорстманна адаптирует Allman , помещая первый оператор блока в ту же строку, что и открывающую скобку. Этот стиль также используется в примерах в «Руководстве пользователя и отчете пользователя Pascal » Дженсена и Вирта . [28]

while   (  x   ==   y  ) 
 {     что-то  (); 
      что-то другое  (); 
      //... 
     if   (  x   <   0  ) 
     {     printf  (  "Negative"  ); 
          отрицательный  (  х  ); 
      } 
     else 
     {     printf  (  «Неотрицательный»  ); 
          неотрицательный  (  x  ); 
      } 
 } 
 Final_thing  (); 

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

Пик [ править ]

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

материал (н):
 { х: 3 * п;
   y: do_stuff (х);
   у + х }
 

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

Рэтлифф [ править ]

В книге «Программисты за работой » [31] К. Уэйн Рэтлифф, автор популярных dBase -II и -III языков программирования четвертого поколения , обсуждался стиль, похожий на 1TBS, но закрывающая скобка совпадает с отступом вложенного блока. Он отметил, что этот стиль изначально был задокументирован в материалах Digital Research Inc. Этот стиль иногда называют баннера . стилем [32] возможно, из-за сходства со знаменем, висящим на шесте. В этом стиле, который для Whitesmiths является тем же, чем K&R для Allman, закрывающий элемент управления имеет такой же отступ, как и последний элемент в списке (и, таким образом, правильно теряет заметность). [21] Для некоторых этот стиль может облегчить визуальное сканирование, поскольку заголовки любого блока — единственное, что выделяется на этом уровне (теоретически, элемент управления закрытием предыдущего блока мешает визуальному потоку заголовка следующего блока в K&R и стили Оллмана). Керниган и Плаугер используют этот стиль в коде Ratfor в Software Tools . [33]

 // В C 
  for   (  i   =   0  ;   i   <   10  ;   i  ++  )   { 
      if   (  i   %   2   ==   0  )   { 
          do_something  (  i  ); 
           } 
      Еще   { 
          do_something_else  (  я  ); 
           } 
      } 

Стили языка, производные от C [ править ]

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

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

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

Традиционный вариант этого стиля в Лиспе предпочитает чрезвычайно узкие уровни отступов (обычно два пробела), поскольку код Лиспа обычно вложен очень глубоко, поскольку в Лиспе есть только выражения , без отдельного класса операторов ; Аргументы функции обычно имеют отступ до одного и того же уровня, чтобы проиллюстрировать их общий статус внутри заключающего выражения. Это также связано с тем, что, если оставить в стороне фигурные скобки, Lisp традиционно является очень кратким языком, в нем опускаются даже распространенные формы простого шаблонного кода как неинформативные, такие как else ключевое слово в if : then | else блок, вместо этого отображая его равномерно как (if expr1 expr2 expr3).

// C 
 for   (  i   =   0  ;   i   <   10  ;   i  ++  ) 
     {  if   (  i   %   2   ==   0  ) 
         {  do_something  (  i  );} 
      else 
         {  do_something_else  (  i  ); 
           сделать_третью_вещь  (  я  );}} 

 

;;   Lisp 
 (  dotimes   (  i   10  ) 
   (  if   (  =   (  rem   i   2  )   0  ) 
       (  do-something   i  ) 
     (  progn 
       (  do-something-else   i  ) 
       (  do-th-th-thing   i  )))) 

Примечание: progn— это процедура последовательного вычисления нескольких подвыражений для эффектов , при этом отбрасываются все возвращаемые значения, кроме конечного (n-го). Если все возвращаемые значения желательны, values будет использована процедура.

Стиль Haskell [ править ]

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

braceless   =   do 
   text   <-   getContents 
   let 
     firstWord   =   head   $   words   text 
     bigWord   =   сопоставить   toUpper   firstWord 
   putStrLn   bigWord 

 braceful   =   do 
   {   text   <-   getContents 
   ;    let 
       {   firstWord   =   head   $   words   text 
       ;    bigWord   =   сопоставить   верхнее   первое слово 
       } 
   ;    putStrLn   bigWord 
   } 

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

Стиль APL [ править ]

В качестве примера того, насколько краток обычно APL, вот реализация ступенчатой ​​функции для Game of Life:

life { 1 . 3  4 =+ / + ¯1  0  1 ∘. ¯1  0  1 ¨ } 

Стиль APL C напоминает краткий стиль кода APL и обычно используется в их реализациях. [37] Этот стиль был впервые предложен Артуром Уитни и широко используется при реализации K , собственного проекта Артура. Язык программирования J также реализован в этом стиле. Примечательно, что не все реализации APL используют этот стиль C, а именно: GNU APL и Dyalog APL.

Помимо отступов в стиле APL C, обычно имена сокращаются до одиночных или двойных символов: чтобы уменьшить количество отступов и выражений, занимающих несколько строк. [ нужна цитата ]

Стиль Python [ править ]

Python не использует фигурные скобки. Отступ определяет блоки в так называемом правиле «вне игры» .

для   i   в   диапазоне  (  10  ): 
     если   я   %   2   ==   0  : 
         do_something  (  i  ) 
     else  : 
         do_something_else  (  i  ) 
         do_ Third_thing  (  i  ) 

Условно отступ составляет четыре пробела. Вкладки также возможны. [38]

Размер отступа [ править ]

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

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

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

Табуляция против пробела [ править ]

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

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

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

Многие текстовые редакторы, включая Notepad++ , TextEdit , Emacs , vi и nano , можно настроить либо на сохранение символов табуляции при вводе с помощью клавиши табуляции, либо на преобразование их в пробелы (в зависимости от настроенной ширины табуляции), чтобы символы табуляции не добавляется в файл при нажатии клавиши табуляции. Некоторые редакторы могут преобразовывать символы табуляции в пробелы и наоборот.

Некоторые пейджеры текстовых файлов , такие как less , можно настроить на ширину табуляции. Некоторые инструменты, такие как развернуть / свернуть, можно конвертировать на лету с помощью фильтров.

Автоматизация стиля [ править ]

Инструмент может автоматизировать код форматирования в соответствии со стилем отступов, например Unix. indent команда.

Emacs предоставляет команды для изменения отступов, включая нажатие Tab по заданной линии. M-x indent-region код отступов.

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

Теряем след блоков [ править ]

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

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

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

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

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

Другой способ сохранить распознавание блоков — использовать комментарии после закрывающей скобки. Например:

для   (  int   я   знак равно   0  ;   я   <   всего  ;   я  ++  )   { 
     foo  (); 
  }   //для (я) 
если   (  Икс   <   0  )   { 
    бар  (); 
  }   //если (х < 0) 

Недостатком является сохранение одного и того же кода в нескольких местах — над и под блоком.

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

Вставка заявления [ править ]

Стиль K&R предотвращает распространенную ошибку, возникающую при вставке строки кода после управляющего оператора – перед открывающей скобкой. Вставленная строка приводит к тому, что блок отделяется от управляющего оператора.

Учитывая этот стартовый код:

for   (  int   я   =   0  ;   я   <   10  ;   я  ++  ) 
 { 
     do_something  (); 
  }   //для (я) 

do_somethingбудет вызван 10 раз. Затем он модифицируется путем добавления новой второй строки:

for   (  int   i   =   0  ;   i   <   10  ;   я  ++  ) 
     do_something_else  (); 
  { 
     сделай что-нибудь  ();    // вызывается один раз! 
  }   //для (я) 

Исходный блок (строки 3–5) больше не является телом forцикл и выполняется только один раз. Далее комментарий в строке 5 становится неверным.

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

Оригинал:

for   (  int   я   =   0  ;   я   <   10  ;   я  ++  )   { 
     do_something  (); 
  }   //для (я) 

Добавление новой второй строки не влияет на то, сколько раз do_something вызывается или достоверность конечного комментария.

for   (  int   я   =   0  ;   я   <   10  ;   я  ++  )   { 
     do_something_else  (); 
      сделай что-нибудь  (); 
  }   //для (я) 

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

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

  1. ^ Вайсман, Лоуренс Марк (1974). Методика исследования психологической сложности компьютерных программ . CSRG-37 (Технический отчет). Группа исследования компьютерных систем, Университет Торонто . OCLC   1085612768 . технический отчетc37univ – через Интернет-архив .
  2. ^ Морцек, Йоханнес; Ханенберг, Стефан; Вергер, Оле; Грюн, Волкер (2023). Отступы в исходном коде: рандомизированное контрольное испытание читаемости потоков управления в Java-коде с большими эффектами . Материалы 18-й Международной конференции по программным технологиям - ICSOFT. Рим , Италия. стр. 117–128. дои : 10.5220/0012087500003538 . ISBN  978-989-758-665-1 – через Стефана Ханенберга на Google Диске (препринт).
  3. ^ «Руководство по стилю Java» . Архивировано из оригинала 12 июля 2018 года. Допускается использование «египетских» фигурных скобок или фигурных скобок в стиле C.
  4. ^ «Египетские скобки» . Фолдок . Юмористический [ sic ] термин для обозначения стиля отступов K&R, обозначающий позу «одна рука вверх вперед, другая вниз сзади».
  5. ^ «Руководство по стилю Google JavaScript» . Фигурные скобки соответствуют стилю Кернигана и Ритчи («египетские скобки») для непустых блоков и блочных конструкций.
  6. ^ Дарвин, Ян Ф. (1988). Проверка программ на C с помощью Lint . Калифорния: О'Рейли и партнеры. п. 51. ИСБН  9780937175309 .
  7. ^ «1ТБС» .
  8. ^ Перейти обратно: а б «Стили фигурных скобок и JavaScript» . 7 января 2013 года . Проверено 8 ноября 2018 г.
  9. ^ Перейти обратно: а б с «Жаргонный файл» . 4.4.7. 29 декабря 2003 года . Проверено 18 августа 2014 г.
  10. ^ Подробное описание стиля дано на kernel.org .
  11. ^ Ларабель, Майкл. «Ядро Linux не поддерживает стиль кодирования строк из 80 символов» . Фороникс . Фороникс Медиа . Проверено 1 мая 2022 г.
  12. ^ Редди, Ачут (30 марта 2000 г.). «Руководство по стилю кодирования Java» (PDF) . Сан Микросистемс. Архивировано из оригинала (PDF) 28 февраля 2006 года . Проверено 30 мая 2008 г.
  13. ^ «Соглашения о коде Java» (PDF) . Сан Микросистемс. 12 сентября 1997 г. Архивировано из оригинала (PDF) 13 мая 2008 г. . Проверено 30 мая 2008 г.
  14. ^ «Соглашения о коде для языка программирования Java» . Сан Микросистемс. 20 марта 1997 года . Проверено 30 мая 2008 г.
  15. ^ Перейти обратно: а б Страуструп, Бьярне (сентябрь 2010 г.). «Руководство по стилю PPP» (PDF) .
  16. ^ Страуструп, Бьерн. «Основные рекомендации по C++» . Гитхаб . Проверено 3 ноября 2018 г.
  17. ^ Перейти обратно: а б с Шеннон, Билл (19 августа 1996 г.). «Стиль C и стандарты кодирования для SunOS» (PDF) . 1.8. Сан Микросистемс, Инк . Проверено 15 июня 2019 г.
  18. ^ Перейти обратно: а б Грегг, Брендан. «Руководство по стилю DTraceToolkit» . Проверено 6 февраля 2015 г.
  19. ^ Шеннон, Билл (9 сентября 1998 г.). "cstyle.pl" . иллюмос-врата . 1.58. Сан Микросистемс, Инк . Проверено 6 февраля 2015 г.
  20. ^ «Жаргонный файл (версия 2.4.3)» . 2.4.3. 23 января 1991 года . Проверено 14 мая 2024 г.
  21. ^ Перейти обратно: а б с МакКоннелл, Стив (2004). Code Complete: Практическое руководство по созданию программного обеспечения . Редмонд, Вашингтон: Microsoft Press. стр. 746–747 . ISBN  978-0-7356-1967-8 .
  22. ^ Перейти обратно: а б «Форматирование исходного кода» . Стандарты кодирования GNU . Проверено 6 июня 2016 г.
  23. ^ Столлман, Ричард (28 октября 2002 г.). «Мой опыт работы с Lisp и разработка GNU Emacs (Стенограмма выступления на Международной конференции Lisp)» . Проверено 6 июня 2016 г.
  24. ^ Бауманн, Рихард [на немецком языке] ; Фелисиано, Мануэль; Бауэр, Фридрих Людвиг ; Самельсон, Клаус (1964). Введение в АЛГОЛ – учебник для неспециалистов, подчеркивающий практическое использование алгоритмического языка . Серия по автоматическим вычислениям. Энглвуд Клиффс, Нью-Джерси, США: Prentice-Hall, Inc. ISBN  0-13-477828-6 . LCCN   64-10740 . ковчег:/13960/t6qz35p37 . Проверено 23 октября 2022 г.
  25. ^ WM McKeeman, JJ Horning и DB Wortman, Генератор компилятора , 1970, https://archive.org/details/compilergenerato00mcke
  26. ^ Протестировано на приведенном выше примере исходного кода в Ubuntu 18.04 с отступом GNU 2.2.11 и GNU Emacs 25.2.2, запущенном с emacs --no-init-file.
  27. ^ «Стиль кодирования ядра Linux» . Проверено 1 января 2017 г.
  28. ^ Дженсен, Кэтлин; Вирт, Никлаус (1974). Руководство пользователя и отчет PASCAL . Издательство Спрингер.
  29. ^ Руководство по стилю Хорстманна
  30. ^ Оно, Асако (2013). «Методология обучения образцовому стилю кодирования с учетом особенностей стиля кодирования студентов, которые содержат колебания». Конференция IEEE Frontiers in Education 2013 (FIE) . стр. 1908–1910. дои : 10.1109/fie.2013.6685167 . ISBN  9781467352611 . S2CID   28385526 .
  31. ^ Ламмерс, Сьюзен (1986). Программисты за работой . Майкрософт Пресс. ISBN  978-0-914845-71-3 .
  32. ^ Патти, Джим. «Документация по художественному стилю 2.05» . Художественный стиль . Проверено 24 апреля 2015 г.
  33. ^ Керниган, Брайан В.; Плаугер, П.Дж. (1976). Программные инструменты . Аддисон-Уэсли. ISBN  9780201036695 .
  34. ^ «Отчет о Haskell 98» . Haskell.org . Проверено 3 марта 2016 г.
  35. ^ Липовача, Миран. «Создание собственных типов и классов типов» . Learnyouahaskell.com . Проверено 3 февраля 2016 г.
  36. ^ Отчет Haskell 1.2 (1992), стр.131 B.4 «Макет»
  37. ^ «Дж Инкунабулум» . jsoftware.com . Проверено 19 мая 2022 г.
  38. ^ ван Россум, Гвидо ; Варшава, Барри; Коглан, Алисса. «PEP 8 – Руководство по стилю для кода Python § Компоновка кода» . peps.python.org . Проверено 11 марта 2024 г.
  39. ^ Миара, Ричард Дж.; Массельман, Джойс А.; Наварро, Хуан А. и Шнейдерман, Бен (ноябрь 1983 г.). «Отступы и понятность программы» (PDF) . Коммуникации АКМ . 26 (11): 861–867. дои : 10.1145/182.358437 . S2CID   11767796 . Проверено 3 августа 2017 г.
  40. ^ Завински, Джейми (2000). «Табы против пробелов: вечная священная война» . Проверено 6 июня 2016 г.
  41. ^ «Стандарты кодирования WordPress» . Проверено 6 июня 2016 г.
  42. ^ Хоффа, Фелипе (26 июля 2017 г.). «400 000 репозиториев GitHub, 1 миллиард файлов, 14 терабайт кода: пробелы или табуляции?» . Середина . Проверено 9 июля 2019 г.
  43. ^ Лэмб, Линда (1998). Изучение редактора vi . О'Рейли. ISBN  9781565924260 .

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

Табуляции и пробелы [ править ]

Arc.Ask3.Ru: конец оригинального документа.
Arc.Ask3.Ru
Номер скриншота №: BFE98422790E467C3EE48F529236C058__1717895400
URL1:https://en.wikipedia.org/wiki/Indent_style
Заголовок, (Title) документа по адресу, URL1:
Indentation style - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть, любые претензии не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, денежную единицу можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)