Открыть сервисСервис

K-энд-Р дизайн в разработке ПО

K-энд-Р дизайн (от англ. K&R style, Kernighan and Ritchie style) — стиль оформления исходного кода в программировании, при котором открывающая фигурная скобка блока остаётся на той же строке, что и управляющая конструкция, а закрывающая выносится на отдельную строку. Название происходит от фамилий Брайана Кернигана и Денниса Ритчи, авторов языка C и классического руководства «The C Programming Language» (1978), где этот стиль использовался последовательно. K-энд-Р относится к группе так называемых «египетских скобок» (Egyptian brackets) и является одним из самых распространённых способов форматирования в языках семейства C.

Происхождение

Стиль сформировался в Bell Labs в 1970-х годах при разработке операционной системы UNIX и языка C. Брайан Керниган и Деннис Ритчи применяли компактную запись блоков, при которой скобка не занимает отдельную строку. Это позволяло экономить вертикальное пространство на терминалах с ограниченным числом строк (обычно 24) и уменьшать объём распечаток листингов.

Название «K&R» закрепилось после выхода первого издания книги «The C Programming Language», ставшей де-факто стандартом описания языка. Позднее стиль был формализован в утилите indent, входившей в состав UNIX, и в руководствах по стилю крупных проектов.

Синтаксис и пример

В классическом виде K-энд-Р записывается так:

`` if (x > 0) { printf("positive"); } else { printf("non-positive"); } ``

Ключевые признаки:

  • открывающая скобка { — на строке с if, for, while, switch, именем функции;
  • тело блока — с отступом (обычно 4 или 8 пробелов);
  • закрывающая скобка } — на отдельной строке, на уровне управляющей конструкции;
  • else — на строке с закрывающей скобкой предыдущего блока.

Для функций в оригинальном K&R скобка также оставалась на строке заголовка, что отличает стиль от варианта «1TBS» (one true brace style), где это правило распространяется только на управляющие конструкции.

Разновидности и родственные стили

СтильПоложение {Примечание
K&Rна строке конструкцииклассический вариант
Allmanна новой строкераспространён в C++, C#
GNUна новой строке, отступ тела +2стандарт проекта GNU
1TBSна строке конструкциивариант K&R, принятый в ядре Linux
Whitesmithsна новой строке с отступомредко используется

Близким к K-энд-Р является стиль, принятый в ядре Linux: Линус Торвальдс закрепил его в документе CodingStyle, где открывающая скобка ставится на строку конструкции, а отступ равен восьми пробелам (табуляции).

Применение

K-энд-Р и его производные широко используются в системном программировании. Среди проектов, придерживающихся этого стиля или его вариантов:

  • ядро Linux;
  • исходный код языков и утилит BSD;
  • проекты на Java (соглашение Sun/Oracle близко к K&R);
  • код на JavaScript в ряде руководств по стилю;
  • Go — язык, где форматирование принудительно приводится утилитой gofmt к варианту с открывающей скобкой на строке конструкции.

В языке Go требование размещать { на строке управляющей конструкции закреплено на уровне синтаксиса: перенос скобки на новую строку приводит к ошибке компиляции из-за автоматической вставки точки с запятой.

Преимущества и недостатки

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

Противники указывают на трудность визуального поиска парных скобок при беглом чтении и на то, что при переносе длинного условия скобка может оказаться далеко от начала конструкции. В сообществах, где принят стиль Олмана (Allman), K-энд-Р считается менее читаемым.

Инструменты и автоматизация

Форматирование кода редко выполняется вручную. Для приведения исходников к выбранному стилю применяются:

  • indent (UNIX) — историческая утилита с опцией -kr;
  • clang-format — поддерживает предустановленные стили, включая LLVM, Google, Mozilla, близкие к K&R;
  • astyle (Artistic Style) — с режимом --style=kr;
  • gofmt — обязательное форматирование для Go;
  • редакторы и IDE (Vim, Emacs, Visual Studio Code) с настраиваемыми правилами отступов.

Автоматическое форматирование снижает разногласия в командах и упрощает чтение диффов в системах контроля версий.

Значение

K-энд-Р дизайн стал одним из первых массово закреплённых стилей оформления кода и повлиял на большинство последующих соглашений. Практически все современные форматтеры предлагают режим, воспроизводящий K&R, а многие языки и проекты используют его как основной или единственный допустимый. Термин вошёл в профессиональный жаргон программистов наряду с обозначениями других стилей — Allman, GNU, 1TBS.

Источники: Б. Керниган, Д. Ритчи «Язык программирования C»; документация GNU indent; Linux Kernel CodingStyle; документация clang-format и Artistic Style; спецификация языка Go.

Заметили ошибку или не согласны с информацией в статье? Напишите нам support@bfometr.ru