architect/standards/6-naming/naming-variables.md

type: standard
aspect: naming
title: "Именование переменных в коде"
version: 1.0.0
date: 2026-02-19
status: active


Именование переменных в коде

Стандарт именования переменных, функций, классов и констант.


ПРИНЦИП

ИМЯ = НАЗНАЧЕНИЕ + КОНТЕКСТ + ПОНЯТНОСТЬ

Код читается чаще, чем пишется.


ОБЩИЕ ПРАВИЛА

1. Английский язык

Обязательно: Все идентификаторы только на английском.

# ✅ Хорошо
user_name = "Иван"
order_total = 1500

# ❌ Плохо
имя_пользователя = "Иван"
summa_zakaza = 1500

2. Описательные имена

Имя должно объяснять назначение:

# ✅ Хорошо
customer_orders = []
is_payment_confirmed = False
calculate_total_price()

# ❌ Плохо
data = []
flag = False
calc()

3. Длина имени

Область видимости Длина Пример
Локальная (цикл) 1-2 символа i, x, fn
Локальная (функция) 2-15 символов user, order_id
Глобальная 3-25 символов customer_database
Константа 3-30 символов MAX_RETRY_ATTEMPTS

4. Аббревиатуры

Избегать, если не очевидно:

# ✅ Хорошо (общепринято)
html_content
api_key
db_connection
url_path

# ⚠️ Осторожно (может быть непонятно)
usr_cnt  # user_count лучше
ord_sts  # order_status лучше

PYTHON

Переменные и функции

Формат: snake_case

# Переменные
user_name = "Alice"
order_count = 5
is_active = True

# Функции
def calculate_total_price(items):
    return sum(item.price for item in items)

def get_user_by_id(user_id: int):
    return database.query(f"SELECT * FROM users WHERE id={user_id}")

Классы

Формат: PascalCase

class UserAccount:
    pass

class OrderProcessor:
    def process_order(self, order):
        pass

class ApiClient:
    pass

Константы

Формат: UPPER_SNAKE_CASE

MAX_RETRY_ATTEMPTS = 3
DEFAULT_TIMEOUT = 30
API_BASE_URL = "https://api.example.com"
ALLOWED_FILE_TYPES = ["jpg", "png", "gif"]

Приватные члены

Формат: _leading_underscore

class MyClass:
    def __init__(self):
        self._internal_state = 0  # Приватная переменная

    def _helper_method(self):     # Приватный метод
        pass

Специальные методы

Формат: __dunder__ (double underscore)

class MyClass:
    def __init__(self):
        pass

    def __str__(self):
        return "MyClass instance"

    def __repr__(self):
        return f"MyClass()"

Типы (Type Hints)

from typing import List, Dict, Optional

def process_users(
    users: List[str],
    settings: Dict[str, int],
    timeout: Optional[int] = None
) -> bool:
    pass

JAVASCRIPT / TYPESCRIPT

Переменные и функции

Формат: camelCase

// Переменные
let userName = "Alice";
const orderCount = 5;
let isActive = true;

// Функции
function calculateTotalPrice(items) {
    return items.reduce((sum, item) => sum + item.price, 0);
}

function getUserById(userId) {
    return database.query(`SELECT * FROM users WHERE id=${userId}`);
}

// Arrow functions
const processOrder = (order) => {
    // ...
};

Классы

Формат: PascalCase

class UserAccount {
    constructor(name) {
        this.name = name;
    }
}

class OrderProcessor {
    processOrder(order) {
        // ...
    }
}

class ApiClient {
    // ...
}

Константы

Формат: UPPER_SNAKE_CASE

const MAX_RETRY_ATTEMPTS = 3;
const DEFAULT_TIMEOUT = 30;
const API_BASE_URL = "https://api.example.com";
const ALLOWED_FILE_TYPES = ["jpg", "png", "gif"];

Приватные члены (TypeScript)

Формат: #private или private

class MyClass {
    #internalState = 0;  // Приватное поле

    private helperMethod() {  // Приватный метод
        // ...
    }
}

Типы (TypeScript)

Формат: PascalCase

type UserId = number;
type UserRole = "admin" | "user" | "guest";

interface User {
    id: UserId;
    name: string;
    role: UserRole;
}

interface OrderData {
    orderId: number;
    items: Item[];
}

React компоненты

Формат: PascalCase

function UserProfile({ userId }: { userId: number }) {
    return <div>User {userId}</div>;
}

const OrderList = () => {
    return <ul>...</ul>;
};

BASH

Переменные

Формат: snake_case или UPPER_SNAKE_CASE (константы)

# Локальные переменные
user_name="Alice"
file_count=5
is_debug=false

# Глобальные константы
readonly MAX_RETRIES=3
readonly DEFAULT_TIMEOUT=30
readonly API_URL="https://api.example.com"

# Окружение
export DATABASE_URL="postgresql://localhost/mydb"
export LOG_LEVEL="info"

Функции

Формат: snake_case

function calculate_total() {
    local sum=0
    for item in "$@"; do
        sum=$((sum + item))
    done
    echo $sum
}

get_user_by_id() {
    local user_id=$1
    # ...
}

Локальные переменные в функциях

Используй local:

function process_file() {
    local input_file=$1
    local output_file=$2
    local temp_file="/tmp/processing.tmp"

    # ...
}

СПЕЦИАЛЬНЫЕ СЛУЧАИ

Boolean переменные

Префиксы: is_, has_, can_, should_

is_active = True
has_permission = False
can_edit = True
should_notify = False

# JavaScript
const isLoading = true;
const hasError = false;
const canSubmit = true;

Коллекции

Множественное число:

users = []
orders = {}
items = set()

# JavaScript
const products = [];
const userMap = new Map();

Счётчики

Префиксы: count_, num_, total_

user_count = 10
num_items = 5
total_price = 1500

# Или суффиксы
items_count = 5
orders_total = 20

Временные переменные

# Циклы
for i in range(10):
    pass

for idx, item in enumerate(items):
    pass

# Временные данные
temp_data = process(raw_data)
tmp_file = "/tmp/processing.tmp"

ID и ключи

Формат: {entity}_id

user_id = 123
order_id = "ORD-456"
product_sku = "PROD-789"

# JavaScript
const userId = 123;
const orderId = "ORD-456";

КОНТЕКСТ И ОБЛАСТЬ ВИДИМОСТИ

Локальные переменные

Короткие имена OK в малой области:

def process_items(items):
    for i in items:      # OK: i в цикле
        print(i)

    total = sum(items)   # OK: total локальная
    return total

Глобальные переменные

Длинные описательные имена:

# ✅ Хорошо
CUSTOMER_DATABASE_CONNECTION = connect_to_db()
DEFAULT_SHIPPING_COST = 500

# ❌ Плохо
conn = connect_to_db()
cost = 500

ПАТТЕРНЫ ИМЕНОВАНИЯ

1. Getter/Setter

# Python (property)
class User:
    @property
    def full_name(self):
        return f"{self.first_name} {self.last_name}"

    @full_name.setter
    def full_name(self, value):
        self.first_name, self.last_name = value.split()

# JavaScript
class User {
    get fullName() {
        return `${this.firstName} ${this.lastName}`;
    }

    set fullName(value) {
        [this.firstName, this.lastName] = value.split(' ');
    }
}

2. Builder/Factory

def create_user(name, email):
    return User(name=name, email=email)

def build_query(table, conditions):
    return f"SELECT * FROM {table} WHERE {conditions}"

3. Handler/Processor

def handle_order_creation(order_data):
    pass

def process_payment(payment_info):
    pass

# JavaScript
const handleClick = (event) => { };
const processForm = (data) => { };

4. Validator/Checker

def validate_email(email: str) -> bool:
    return "@" in email

def check_permissions(user, action):
    return user.has_permission(action)

# JavaScript
const isValidEmail = (email) => email.includes('@');
const checkPermissions = (user, action) => { };

АНТИ-ПАТТЕРНЫ

❌ Избегать

# Однобуквенные имена (кроме циклов)
a = get_user()
x = calculate()

# Бессмысленные имена
data = []
info = {}
temp = 123

# Венгерская нотация
strUserName = "Alice"
intCount = 5
boolIsActive = True

# Сокращения
usr = get_user()
ord = process_order()
calc = lambda x: x * 2

# Повторение типа
user_dict = {}        # user достаточно
items_list = []       # items достаточно

✅ Правильно

user = get_user()
total = calculate_total()

customer_data = []
order_info = {}
temp_value = 123

user_name = "Alice"
item_count = 5
is_active = True

customer = get_customer()
order = process_order()
double = lambda x: x * 2

users = {}
items = []

СВЯЗАННЫЕ СТАНДАРТЫ

Стандарт Связь
format-code.md Стиль кода (Black, Prettier)
naming-files.md Именование файлов
naming-projects.md Именование проектов
naming-database.md Именование таблиц БД

ИНСТРУМЕНТЫ

Линтеры

# Python
ruff check .              # Проверка именования
pylint *.py               # Полный анализ

# JavaScript/TypeScript
eslint *.js               # Проверка стиля
tslint *.ts               # TypeScript линтер

# Bash
shellcheck script.sh      # Анализ скриптов

Форматтеры

# Python
black .                   # Автоформатирование

# JavaScript
prettier --write .        # Автоформатирование

# Bash
shfmt -w script.sh        # Форматирование скриптов

CHANGELOG

2026-02-19 — v1.0.0


Версия: 1.0.0
Статус: active
Владелец: architect