Нотации в программировании: верблюд, змея, шашлык и другие
Разные способы соединить слова в одно длинное название — с вариациями и пояснениями.
Часто для хорошего имени переменной или метода программистам не хватает одного слова. Например, название метода calculate, конечно, намекает на то, что в нём что-то вычисляется, но что конкретно — непонятно, нужны ещё слова.
Проблема с языками программирования в том, что пробелы в названиях там недопустимы — нельзя назвать метод calculate elephant weight. Поэтому появились многочисленные варианты соединения слов с помощью изменения регистра букв или дописывания символов-разделителей.
Соглашения об именовании переменных, констант и других идентификаторов в программном коде называют нотациями.
Расскажем, какие есть основные нотации и для чего они используются.
- Camel case, camelCase — верблюжья нотация
- Pascal case, PascalCase — нотация Паскаля
- Snake case, snake_case — змеиная нотация
- Kebab case, kebab-case — шашлычная нотация
- Train case, Train-Case — поездная нотация
- Flat case, flatcase — плоская нотация
- Hungarian notation — венгерская нотация
- Как выбрать нотацию
Camel case, camelCase — верблюжья нотация

Первое слово пишется со строчной буквы, следующие — с заглавной, разделителей между составными частями нет. Торчащие посреди итогового названия заглавные буквы напомнили кому-то горбы верблюда — так возникло название нотации.
Пример
calculateElephantWeight
Используется во многих языках программирования для именования переменных, функций, методов — например, в Java, JavaScript, PHP. В языке Go в camelCase объявляют внутренние поля и методы.
Язык Go вообще чувствителен к именам: от того, с какой буквы, строчной или заглавной, начинается имя переменной, зависит её область видимости — то, какие другие компоненты приложения смогут к этой переменной обратиться.
Для внутренних переменных подходит camelCase, а для публичных (экспортируемых) обязательно делать первую букву названия заглавной, то есть именовать в стиле PascalCase.
Pascal case, PascalCase — нотация Паскаля

Тот же camelCase, но все слова, даже первое, начинаются с заглавной буквы.
Пример
CalculateElephantWeight
В таком стиле часто именуют классы (в Java, Python, JavaScript), а в программной платформе .NET — ещё и переменные.
Стиль так называется вовсе не в честь Блеза Паскаля. Pascal case стал известным благодаря одному почти забытому языку Паскаль — в нём так именовались переменные, процедуры и функции.
А вот язык Паскаль, кстати, назван Никлаусом Виртом, его создателем, как раз в честь великого француза.
Иногда Pascal case называют upper camel case или, наоборот, camel case называют low Pascal case.
В XIX веке программирования ещё не было, зато уже были химия и химики. Один из них, некто Берцелиус, предложил в формулах веществ называть химические элементы одной или двумя буквами, а итог записывать в одно слово без пробелов. Причём первые буквы составляющих должны быть заглавными.
Благодаря этому прекрасному человеку мы до сих пор записываем формулу поваренной соли в виде NaCl, а не целиком Sodium Chloride или менее читабельно — NA CL.
Snake case, snake_case — змеиная нотация

Слова разделяются символами подчёркивания — они как бы ползут по строке, в результате получается дли-и-инное, как змея, название.
Пример
calculate_elephant_weight
Используется, например, в языках Python и Rust для имён переменных и функций.
Если в предыдущем примере заменить все буквы на заглавные, то получится SCREAMING_SNAKE_CASE (кричащая змеиная нотация).
Эту вариацию чаще всего применяют для определения констант — в тех же Python и Rust, Java, PHP и многих других.
Кричащей её назвали, потому что в интернет-переписке переход на капс часто означает повышение градуса беседы и даже крик.
Исследование Бониты Шариф и её коллег по Кентскому университету показало, что имена, разделённые подчёркиваниями, быстрее распознаются. Чтобы это доказать, учёные записывали движения глаз участников эксперимента, пока те читали названия в разных нотациях.
Kebab case, kebab-case — шашлычная нотация

В этой нотации слова разделяют символом дефиса. При некоторой доле фантазии можно представить, что слова при этом как бы насаживают на шампур — вот и получается шашлык (kebab).
Пример
calculate-elephant-weight
Примеры использования мы каждый день видим в URL-адресах, ещё kebab-имена дают CSS-стилям и HTML-тегам. В стайлгайде для Angular (фреймворк для веб-разработки) в kebab-нотации рекомендуют называть файлы компонентов, сервисов и других элементов приложения.
Существует kebab-case со всеми заглавными буквами — это SCREAMING-KEBAB-CASE (кричащая шашлычная нотация). Второе название такого стиля — COBOL_CASE, потому что в нём записывают все названия в языке COBOL. Это старый, но очень живучий язык.
Проблема с этой нотацией в том, что знак дефиса можно интерпретировать как минус. Так что, если поставить этот разделитель не там, можно получить весёлые и странные баги.
Train case, Train-Case — поездная нотация

В Train case каждое слово пишется с заглавной буквы, а сами слова соединяются дефисами. Визуально такая запись напоминает состав из вагонов, которые следуют друг за другом, — отсюда и название.
Пример
Calculate-Elephant-Weight
Чаще всего нотация Train case встречается в HTTP‑заголовках — например, Content-Type, Accept-Language или Cache-Control. Из‑за этой привязки к протоколу стиль также называют HTTP Header Case. Иногда так оформляют и заголовки текстов и имена файлов: например, файл с инструкцией могут назвать Project-Setup-Guide.md, а список изменений — Release-Notes.md.
И ещё один нюанс: Train case легко спутать с kebab-case, ведь структура у них одинаковая — слова разделяются дефисами. Разница только в регистре: в Train case каждое слово пишется с заглавной буквы, а в kebab-case — со строчной.
Интересно, что в HTTP-заголовках такой регистр использовался как традиция. Сам протокол к регистру нечувствителен: сервер одинаково поймёт и Content-Type, и content-type, и CONTENT-TYPE. А вот в новой версии протокола HTTP/2 разработчики пошли ещё дальше и договорились писать имена заголовков только строчными буквами. То есть вместо Content-Type там будет content-type, поэтому поездная нотация с заглавными уже не встречается.

Читайте также:
Flat case, flatcase — плоская нотация
Чтобы получить наименование в этом стиле, нужно просто записать слова рядом без пробелов, все буквы каждого слова должны быть строчными.
Пример
calculateelephantweight
Если в этом примере заменить все буквы на заглавные, получится кричащая плоская нотация — UPPERCASE. Правда, используют её редко, поскольку без разделителей длинное слово, набранное заглавными, читать ещё труднее. Поэтому к ней прибегают разве что для записи коротких констант, флагов или небольших аббревиатур — например, PI, MAX, DEBUG, TRUE или EOF.
Переменные, классы и другие элементы программ обычно так не называют: их будет сложно разделить на слова при чтении, особенно если слов больше двух, как в примере. Зато плоская нотация встречается в именах пакетов. В Java, например, можно создать пакет com.example.flatcase.mypackage.
Но чаще всего такого рода длинные надписи мы видим в соцсетях — #этожеобычнаяпрактикадлятегов :)
Hungarian notation — венгерская нотация
Эта нотация стоит особняком: здесь к имени переменной добавляют короткий префикс, который указывает тип или назначение. Сначала идёт строчный префикс, затем — имя с заглавной буквы. Посмотрите несколько примеров:
- strName — строка (string);
- iCount — целое число (integer);
- bIsValid — логическое значение (boolean);
- fPrice — дробное число (float);
- chLetter — символ (char);
- arrUsers — массив (array).
Венгерская нотация стала популярной вместе с Windows API и на волне расцвета C и C++. В то время языки программирования были менее строги к типам, а редакторы кода ещё не умели подсказывать, что за переменная перед вами. Сегодня, когда IDE показывает тип по наведению курсора, такие префиксы выглядят избыточными, поэтому стиль почти не используют. И всё же он не исчез полностью: венгерскую нотацию можно встретить в легаси‑проектах на Win32 API и MFC, в исходниках и документации Microsoft, а также в именах элементов интерфейса вроде btnSave или lblTitle.
А что касается названия, то оно родилось из шутки. Нотацию придумал программист Microsoft Чарльз Симони, венгр по происхождению. Из‑за обилия префиксов код выглядел так, будто написан на незнакомом языке, — коллеги посмеивались, что «это какой-то венгерский». Вот так имя и прижилось.
Как выбрать нотацию
Лучшей нотации на все случаи жизни не существует. Для разных языков программирования есть разные соглашения о наименованиях — это свод правил с рекомендациями, какие имена стоит выбирать для разных элементов программы (переменных, классов, методов и тому подобного). Например, здесь такого рода соглашения для Python, а здесь — для Java.
Обычно разработчики придерживаются этих общепринятых рекомендаций, но никто не запрещает IT-компаниям устанавливать свои правила, если они не противоречат синтаксису языка. В таком случае лучше соблюдать местные соглашения — если, конечно, вы хотите задержаться в этой компании: -)
Иногда стили даже комбинируют. Так появляются смешанные нотации вроде Pascal_Snake_Case (Min_Value) или camel_Snake_Case (min_Value), где заглавные буквы соседствуют с подчёркиваниями. Это экзотика — специально запоминать её не нужно, но, встретив такое в чужом коде, вы уже не удивитесь.
Мы на наших курсах не своевольничаем — учим называть переменные по всем канонам языка: будь то Java, C#, популярный сейчас R или другие из нашего каталога курсов. Бонусом к правилам наименования — навыки программирования на выбранном языке, а потом и помощь в трудоустройстве.
Больше интересного про код — в нашем телеграм-канале. Подписывайтесь!