Стили регистра: шпаргалка от camelCase до kebab-case
Все стили регистра в одной таблице — camelCase, PascalCase, snake_case, kebab-case, dot.case — с примерами и указанием, какой язык какой требует.
Стиль регистра — это правило, которое определяет, какие буквы во фразе заглавные и что стоит между словами (если вообще стоит). В ходу около дюжины стилей. Ниже все они, на одном и том же примере.
Все стили регистра в одной таблице
| Стиль | 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°, удаление лишних пробелов — убрать двойные пробелы и пустые строки перед конвертацией, найти и заменить — массовая правка по всему документу.