belun.app Блог
EN
· обновлено

Стили регистра: шпаргалка от camelCase до kebab-case

Все стили регистра в одной таблице — camelCase, PascalCase, snake_case, kebab-case, dot.case — с примерами и указанием, какой язык какой требует.

Typography and letters in different font styles — text case conversion

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

Все стили регистра в одной таблице

Стиль user account settings превращается в Другие названия Где применяется
UPPER CASE USER ACCOUNT SETTINGS верхний регистр, капс Аббревиатуры, заголовки
lower case user account settings нижний регистр Обычный текст
Title Case User Account Settings заголовочный регистр Названия книг и статей в английском
Sentence case User account settings — Тексты интерфейса, заголовки
camelCase userAccountSettings верблюжий регистр, нижний camel Переменные в JS, Java, Swift
PascalCase UserAccountSettings верхний camel, CapWords, StudlyCaps Классы, типы, компоненты
snake_case user_account_settings змеиный регистр Python, Ruby, колонки БД
SCREAMING_SNAKE_CASE USER_ACCOUNT_SETTINGS CONSTANT_CASE, верхний snake Константы, переменные окружения
kebab-case user-account-settings шашлычный регистр, spinal case CSS-классы, URL-слаги, имена файлов
Train-Case User-Account-Settings HTTP-Header-Case Имена HTTP-заголовков
COBOL-CASE USER-ACCOUNT-SETTINGS кричащий kebab COBOL, отдельные форматы конфигов
dot.case user.account.settings — Ключи конфигов, ключи локализации
flatcase useraccountsettings — Имена пакетов в Go, старый код
aLtErNaTiNg cAsE uSeR aCcOuNt SeTtInGs mocking case Мемы, не более того

Конвертер регистра текста выдаёт восемь из них — UPPER, lower, Title, Sentence, camelCase, PascalCase, snake_case и kebab-case — в один клик, прямо в браузере.

Одно название из списка стилем регистра не является: капитель (small caps). Это свойство шрифта (font-variant-caps в CSS), а не изменение символов. Скопируйте такой текст со страницы — вернутся обычные строчные буквы.

Что требует конкретный язык

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

Язык Переменные и функции Типы и классы Константы
Python (PEP 8) snake_case CapWords SCREAMING_SNAKE_CASE
JavaScript / TypeScript camelCase PascalCase SCREAMING_SNAKE_CASE
Java camelCase PascalCase SCREAMING_SNAKE_CASE
C# camelCase для локальных, PascalCase для методов PascalCase PascalCase
Go mixedCaps / MixedCaps для экспорта MixedCaps MixedCaps, без snake
Rust (RFC 430) snake_case UpperCamelCase SCREAMING_SNAKE_CASE
Ruby snake_case PascalCase SCREAMING_SNAKE_CASE
PHP (PSR-12) camelCase PascalCase SCREAMING_SNAKE_CASE
Swift lowerCamelCase UpperCamelCase lowerCamelCase
SQL snake_case для колонок — —
CSS kebab-case — --kebab-case для переменных

Go здесь — исключение, на котором спотыкаются. Регистр первой буквы в нём означает видимость: идентификатор с заглавной экспортируется из пакета, со строчной — нет. Переименование userID в UserID меняет поведение программы, а не оформление.

Где выбора нет

В нескольких местах неверный стиль — это не вопрос вкуса, а поломка.

URL — kebab-case. Google читает дефис как разделитель слов, а подчёркивание — как соединитель. blue-widget индексируется двумя словами, blue_widget — одним токеном, который никто не ищет. В русских адресах к этому добавляется транслитерация: кириллица в URL превращается в процентные последовательности вида %D0%BA, поэтому слаг лучше сразу делать латиницей — это и делает генератор URL-слагов.

Колонки БД — snake_case. Идентификатор без кавычек приводится к одному регистру самой СУБД: PostgreSQL — к нижнему, Oracle — к верхнему. Колонка userId, созданная без кавычек, сохранится как userid, и дальнейшие запросы с userId будут работать случайно. Подчёркивания снимают вопрос.

Переменные окружения — SCREAMING_SNAKE_CASE. POSIX допускает в переносимом имени только буквы, цифры и подчёркивание. API-KEY — не переменная оболочки.

Имена файлов — строчный kebab-case. macOS и Windows к регистру нечувствительны, Linux — чувствителен. Импорт ./Header.css при файле header.css соберётся локально и даст 404 на сервере.

HTML и DOM — kebab-case снаружи, camelCase внутри. Атрибут data-user-id читается в JavaScript как dataset.userId; браузер конвертирует в обе стороны сам.

JSON и API — camelCase или snake_case, но что-то одно. В экосистеме JavaScript принят camelCase, в Python и Rails — snake_case. Ошибка не в выборе, а в смешении двух в одном ответе. Посмотреть, какие ключи реально приходят, удобно через форматтер JSON.

Как работает конвертация

Любое преобразование — это два шага, и интересен только первый: разбить фразу на слова, а затем собрать их с нужным разделителем и регистром.

Разбиение и есть сложная часть. Делить нужно по пробелам, _, -, ., / и по переходу от строчной буквы к заглавной — иначе theQuickBrownFox останется одним словом. Отдельная ловушка — аббревиатуры: в XMLHttpRequest разрез ставится перед последней заглавной серии, а не между каждой парой букв, иначе на выходе получится x_m_l_http_request.

Вот что даёт корректное разбиение:

Ввод camelCase PascalCase snake_case kebab-case
user account settings userAccountSettings UserAccountSettings user_account_settings user-account-settings
theQuickBrownFox theQuickBrownFox TheQuickBrownFox the_quick_brown_fox the-quick-brown-fox
UserAccountSettings userAccountSettings UserAccountSettings user_account_settings user-account-settings
user-account-settings userAccountSettings UserAccountSettings user_account_settings user-account-settings
parseHTTPResponse parseHttpResponse ParseHttpResponse parse_http_response parse-http-response
my file.name.txt myFileNameTxt MyFileNameTxt my_file_name_txt my-file-name-txt

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

Обратите внимание на цену правила аббревиатур: parseHTTPResponse возвращается как parseHttpResponse. Так предписывает гайдлайн C#, где в аббревиатурах от трёх букв заглавной остаётся только первая. PEP 8 и Effective Go требуют обратного — сохранять аббревиатуру целиком (HTTPServerError, ServeHTTP), так что в этих двух языках её придётся вернуть вручную.

Кириллица: что работает, а что нет

Все стили регистра пришли из англоязычного кода, но на русский текст они ложатся по-разному.

  • UPPER / lower работают как обычно: ПРИВЕТ МИР и привет мир.
  • camelCase, PascalCase, snake_case, kebab-case технически применимы — конвертер вернёт приветМир, ПриветМир, привет_мир, привет-мир, — но в коде кириллические идентификаторы не используют: половина инструментов разберёт их неверно, а часть просто не примет.
  • Title Case в русском языке не существует как норма. «Конвертер Регистра Текста» — калька с английского; по правилам русской типографики в заголовке с заглавной пишется только первое слово и имена собственные. Для русских заголовков нужен Sentence case.

Три типичные ошибки

Смешение стилей для одной сущности. Ключ userId в JavaScript — не user_id; один из двух молча вернёт undefined. Конвертировать нужно на границе систем, один раз и в одном месте.

Капс ради акцента. Верхний регистр — для аббревиатур и констант. Три слова ЗАГЛАВНЫМИ в абзаце читаются как крик, а экранные дикторы могут прочитать их по буквам.

Title Case в интерфейсе. Для русского интерфейса это просто ошибка, для английского — замедляет чтение: Google, Apple и большинство современных гайдлайнов предписывают sentence case для кнопок, заголовков и подписей.

Частые вопросы

camelCase — это шрифт?

Нет. Это соглашение о написании, а не гарнитура: оно описывает только расстановку заглавных и выглядит одинаково в любом шрифте. Название — от «горбов», которые заглавные образуют в середине слова.

Чем camelCase отличается от PascalCase?

Только первой буквой. userAccountSettings — camelCase, UserAccountSettings — PascalCase. В большинстве языков первый стиль отведён переменным и функциям, второй — классам и типам.

Почему регистр называется «шашлычным» (kebab-case)?

Потому что дефисы похожи на шампур, нанизывающий слова. Встречаются и другие названия — spinal case, lisp case, dash case, — но закрепилось kebab-case.

Какой регистр нужен для URL?

kebab-case в нижнем регистре и латиницей. Дефисы поисковики считают разделителями слов, подчёркивания — нет, а нижний регистр исключает дубли адресов на чувствительных к регистру серверах.

snake_case и SCREAMING_SNAKE_CASE — одно и то же?

Разделитель один, регистр разный. snake_case — строчный, им называют переменные и функции; SCREAMING_SNAKE_CASE — прописной, им называют константы и переменные окружения.

Есть ли официальный стандарт стилей регистра?

Единого нет. Unicode описывает, как меняется регистр отдельной буквы, но не то, как соединяются слова. Соглашение публикует каждое языковое сообщество отдельно: PEP 8 для Python, RFC 430 для Rust, PSR-12 для PHP, Effective Go для Go.

Конвертировать в один клик

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

Другие инструменты, меняющие строку, не трогая слова: инвертор текста — обратный порядок символов и поворот букв на 180°, удаление лишних пробелов — убрать двойные пробелы и пустые строки перед конвертацией, найти и заменить — массовая правка по всему документу.

Попробуйте инструмент

Конвертер регистра текста →