Соглашения об именовании

Одной из важнейших характеристик исходного кода является его «читаемость» — насколько просто будет разобраться в написанном стороннему программисту.

Чтобы упростить процесс чтения кода, улучшить его «читаемость», применяются соглашения об именовании, форматировании и прочих аспектах кодирования.

Часто в языке программирования существует общепризнанный или официально рекомендованный стандарт.

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

Каждый стандарт имеет свои преимущества и недостатки. Но самым важным в контексте «читаемости» является наличие стандарта как такового, а также его последовательное применение в исходном коде.

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

Существует несколько популярных нотаций именования:

  • Camel case (camelCase)

  • Pascal case (PascalCase)

  • Snake case (snake_case)

  • Uppercase snake case (UPPERCASE_SNAKE_CASE)

  • Kebab case (kebab-case)

В реальности их гораздо больше, хотя многие уже вышли из обихода и не употребляются, либо употребляются крайне редко. Например, Cobol case (COBOL-CASE).

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

Поэтому эти нотации также называют стилями написания составных слов.

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

Camel case

Русскоязычное название: «Верблюжий регистр», «Горбатый регистр».

Стилизованное название: camelCase.

Описание: Имя записанное в Camel case являет собою несколько слов, записанных слитно без пробелов. Первое слово начинается со строчной буквы, все последующие — с прописной.

Примеры: user, isConnected, symbolsCount, unsubscribeTitle, campaignId.

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

Pascal case

Русскоязычное название: «Нотация Паскаля».

Стилизованное название: PascalCase.

Описание: В Pascal case слова пишутся слитно. Каждое из них начинается с заглавной буквы. В отличие от Camel case, где первое слово начинается со строчной.

Примеры: User, IsConnected, SymbolsCount, UnsubscribeTitle, CampaignId.

Применение: Данная нотация широко используется при именовании классов во многих языках программирования.

Существует альтернативное мнение, касательно стилей называемых Camel case и Pascal case.

Согласно этому мнению есть два подвида нотации Camel case: lower (lowerCamelCase) и upper (UpperCamelCase).

И Pascal case является лишь альтернативным названием для подвида upper, а не отдельным стилем.

Snake case

Русскоязычное название: «Змеиный регистр».

Стилизованное название: snake_case.

Описание: В Snake case все слова пишутся строчными буквами. А вместо пробела используется символ нижнего подчеркивания — _.

Примеры: user, is_connected, symbols_count, unsubscribe_title, campaign_id.

Применение: Snake case используется при именовании полей в базах данных.

Uppercase snake case

Русскоязычное название: «Змеиный регистр в верхнем регистре».

Стилизованное название: UPPERCASE_SNAKE_CASE.

Описание: Uppercase snake case, как и Snake case, использует символ нижнего подчеркивания в качестве замены пробелу. Только в отличие от Snake case все слова записываются прописными буквами.

Примеры: USER, IS_CONNECTED, SYMBOLS_COUNT, UNSUBSCRIBE_TITLE, CAMPAIGN_ID.

Применение: Данная нотация часто используется в качестве соглашения об именовании констант.

Kebab case

Русскоязычное название: «Шашлычная нотация».

Стилизованное название: kebab-case.

Описание: Kebab case похож на Snake case, только в нем пробелы заменяются на дефисы — -. Слова также пишутся строчными буквами.

Примеры: user, is-connected, symbols-count, unsubscribe-title, campaign-id.

Применение: Данный стиль часто используется в ссылках. Например, http://example.com/article-about-cases/.

Венгерская нотация

Венгерская нотация (Hungarian notation, HN) — соглашение об именовании переменных, констант и прочих идентификаторов, созданное венгерским программистом Чарльзом Симони во время работы в Microsoft.

Именно происхождение автора дало имя данной нотации.

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

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

  • Данные о типе

  • Данные о видимости

  • Данные о назначении

Данные о типе

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

Примеры

Идентификатор

Префикс

Значение

sUnsubscribeTitle

s

string

bIsEmpty

b

boolean

iSize

i

integer

Данные о видимости

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

Примеры

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

Также во многих языках программирования широко используется префикс g_ для обозначения глобальных переменных.

Данные о назначении

Также метаданные могут отражать назначение сущности.

Примеры

Идентификатор

Префикс

Значение

aDimensions

a

array

iCat

i

index

сSymbols

c

counter

Венгерская нотация имеет неоднозначную репутацию. Многие программисты заявляют, что являются противниками данного подхода к именованию.

В книге Мартина Роберта «Чистый код: создание, анализ и рефакторинг» есть следующие строки о схемах кодирования имен:

У нас и так хватает хлопот с кодированием, чтобы искать новые сложности. Кодирование информации о типе или области видимости в именах только создает новые хлопоты по расшифровке. Вряд ли разумно заставлять каждого нового работника изучать очередной «язык» кодирования — в дополнение к изучению (обычно немалого) объема кода, с которым он будет работать.

А также о Венгерской нотации в частности:

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

Источники информации:

Last updated