Соглашения об именовании в программировании — camelCase, snake_case и далее
Вы впервые открываете кодовую базу и видите getUserName, get_user_name и GetUserName в одном и том же файле. Сразу понятно, что что-то пошло не так. Соглашения об именовании — это одна из тех вещей, которые кажутся тривиальными, пока вы не начнёте работать в команде — тогда они становятся необходимыми.
Единообразное именование — это не вопрос личных предпочтений. Это способ сделать код читаемым для следующего человека, который к нему прикоснётся, а это часто вы сами через шесть месяцев.
Почему соглашения об именовании важны
Три вещи разрушаются, когда в проекте нет единообразного именования:
- Читаемость страдает — Когда стили переменных меняются каждые несколько строк, ваш мозг тратит циклы на разбор формата вместо понимания логики
- Командная работа распадается — Pull request-ы превращаются в поля битвы за стиль вместо содержания. Адаптация новых разработчиков занимает больше времени, потому что нет предсказуемого паттерна
- Инструменты перестают работать правильно — Линтеры, автодополнение, генераторы кода и инструменты рефакторинга зависят от предсказуемых паттернов именования
Какое соглашение вы выберете — гораздо менее важно, чем выбрать одно и придерживаться его. Кодовая база с единообразным snake_case повсюду бесконечно лучше, чем та, где смешаны три разных стиля.
Полное руководство по соглашениям об именовании
camelCase
Первое слово строчное, каждое последующее слово начинается с заглавной буквы. Без разделителей.
// JavaScript / TypeScript
const userName = "Alice";
let itemCount = 42;
function getUserProfile(userId) {
return fetchData(`/users/${userId}`);
}
Где используется: JavaScript, TypeScript и Java используют camelCase для переменных, имён функций и методов. Это также стандарт в Swift для локальных переменных и параметров функций.
PascalCase
Каждое слово начинается с заглавной буквы. Также называется UpperCamelCase.
// TypeScript / C#
class UserProfile {
firstName: string;
lastName: string;
}
interface DatabaseConnection {
host: string;
port: number;
}
// React компонент
function NavigationBar({ items }: NavProps) {
return <nav>{/* ... */}</nav>;
}
Где используется: C# использует PascalCase практически для всего публичного — классов, методов, свойств. TypeScript и JavaScript используют его для классов, интерфейсов, псевдонимов типов и перечислений. React обязывает использовать PascalCase для имён компонентов, потому что JSX должен отличать компоненты от HTML-элементов.
В Go PascalCase имеет особое значение: любой идентификатор, начинающийся с заглавной буквы, является экспортированным (публичным).
snake_case
Все слова строчные, разделённые подчёркиваниями.
# Python
user_name = "Alice"
item_count = 42
def get_user_profile(user_id):
return fetch_data(f"/users/{user_id}")
class UserProfile:
def __init__(self, first_name, last_name):
self.first_name = first_name
self.last_name = last_name
Где используется: Python использует snake_case практически для всего, кроме имён классов. Ruby следует тому же паттерну. Rust использует snake_case для переменных, функций и модулей. Схемы баз данных почти повсеместно используют snake_case для имён таблиц и столбцов.
SCREAMING_SNAKE_CASE
Всё заглавными буквами с подчёркиваниями. Зарезервировано для констант и значений, которые никогда не должны меняться.
// Константы в большинстве языков
const MAX_RETRY_COUNT = 3;
const API_BASE_URL = "https://api.example.com";
const DEFAULT_TIMEOUT_MS = 5000;
Где используется: Почти все языки используют SCREAMING_SNAKE_CASE для констант. Формат полностью заглавными буквами — универсальный сигнал: «не переназначайте это значение».
kebab-case
Всё строчными буквами с дефисами в качестве разделителей.
/* Имена CSS-классов */
.navigation-bar {
background-color: #1a1a2e;
}
.user-profile-card {
border-radius: 8px;
}
# Флаги CLI
npm install --save-dev eslint
git commit --no-verify
Где используется: CSS и HTML сильно отдают предпочтение kebab-case. URL-слаги используют его. CLI-инструменты и флаги командной строки следуют ему.
kebab-case нельзя использовать для имён переменных в большинстве языков программирования, потому что дефис интерпретируется как оператор вычитания.
dot.case
Слова разделены точками.
// Имена пакетов Java
package com.example.userservice.controllers;
import org.springframework.boot.SpringApplication;
Где используется: Именование пакетов Java, расширения файлов, ключи свойств конфигурации в Spring Boot и подобных фреймворках.
Title Case
Каждое значимое слово с заглавной буквы. Второстепенные слова вроде «и», «в», «для» остаются строчными.
Где используется: Заголовки UI, названия страниц, пункты меню, разделы документации и имена собственные.
path/case
Слова разделены косыми чертами, следуя соглашениям файловой системы или пространств имён.
Где используется: Пути файловой системы, пути модулей, иерархии пространств имён и структуры маршрутизации URL.
Таблица соглашений по языкам
| Язык | Переменные / Функции | Классы / Типы | Константы | Файлы |
|---|---|---|---|---|
| JavaScript / TypeScript | camelCase | PascalCase | SCREAMING_SNAKE_CASE | kebab-case или camelCase |
| Python | snake_case | PascalCase | SCREAMING_SNAKE_CASE | snake_case |
| Go | camelCase (неэкспортируемый) | PascalCase (экспортируемый) | PascalCase или ALL_CAPS | snake_case |
| Rust | snake_case | PascalCase | SCREAMING_SNAKE_CASE | snake_case |
| Java | camelCase | PascalCase | SCREAMING_SNAKE_CASE | PascalCase |
| C# | camelCase (приватный) | PascalCase (публичный) | PascalCase | PascalCase |
| Ruby | snake_case | PascalCase | SCREAMING_SNAKE_CASE | snake_case |
| CSS | kebab-case | — | — | kebab-case |
| SQL | snake_case (столбцы) | — | ЗАГЛАВНЫЕ (ключевые слова) | snake_case |
| PHP | camelCase | PascalCase | SCREAMING_SNAKE_CASE | PascalCase |
Распространённые ошибки и как их исправить
1. Смешивание соглашений в одной области видимости
// ❌ Непоследовательно
const user_name = "Alice";
const itemCount = 42;
const MaxRetries = 3;
// ✅ Последовательный camelCase
const userName = "Alice";
const itemCount = 42;
const maxRetries = 3;
2. Использование неправильного соглашения для языка
# ❌ Использование camelCase в Python
def getUserProfile(userId):
userName = fetchUser(userId)
return userName
# ✅ Использование snake_case, как ожидает Python
def get_user_profile(user_id):
user_name = fetch_user(user_id)
return user_name
3. Аббревиатуры и акронимы
// ❌ Непоследовательная обработка акронимов
const XMLParser = new XmlParser();
const htmlToJSON = convert(HTMLString);
// ✅ Обращаться с акронимами как со словами
const xmlParser = new XmlParser();
const htmlToJson = convert(htmlString);
4. Булевы имена без префиксов is/has/can
// ❌ Неоднозначный булев
const active = true;
// ✅ Чёткое намерение булева
const isActive = true;
Автоматическое преобразование между соглашениями
Когда вы работаете между языками, ручное преобразование соглашений об именовании утомительно и чревато ошибками.
Наш Конвертер регистра строк делает это автоматически. Вставьте любой идентификатор и преобразуйте его между camelCase, PascalCase, snake_case, kebab-case и другими одним кликом.
Дополнительное чтение
- Лучшие практики форматирования JSON — Структурируйте данные так же чисто, как именуете переменные
- Шпаргалка по регулярным выражениям — Справочник по сопоставлению шаблонов для валидации и обработки текста
- Лучшие практики форматирования SQL — Пишите читаемые SQL-запросы
Готовы автоматически преобразовывать соглашения об именовании? Попробуйте наш Конвертер регистра строк — вставьте любой идентификатор и преобразуйте его между camelCase, snake_case, PascalCase, kebab-case и другими. Без регистрации, без отправки данных на серверы, полностью бесплатно.