type: standard
aspect: naming
title: "Именование переменных в коде"
version: 1.0.0
date: 2026-02-19
status: active
Стандарт именования переменных, функций, классов и констант.
ИМЯ = НАЗНАЧЕНИЕ + КОНТЕКСТ + ПОНЯТНОСТЬ
Код читается чаще, чем пишется.
Обязательно: Все идентификаторы только на английском.
# ✅ Хорошо
user_name = "Иван"
order_total = 1500
# ❌ Плохо
имя_пользователя = "Иван"
summa_zakaza = 1500
Имя должно объяснять назначение:
# ✅ Хорошо
customer_orders = []
is_payment_confirmed = False
calculate_total_price()
# ❌ Плохо
data = []
flag = False
calc()
| Область видимости | Длина | Пример |
|---|---|---|
| Локальная (цикл) | 1-2 символа | i, x, fn |
| Локальная (функция) | 2-15 символов | user, order_id |
| Глобальная | 3-25 символов | customer_database |
| Константа | 3-30 символов | MAX_RETRY_ATTEMPTS |
Избегать, если не очевидно:
# ✅ Хорошо (общепринято)
html_content
api_key
db_connection
url_path
# ⚠️ Осторожно (может быть непонятно)
usr_cnt # user_count лучше
ord_sts # order_status лучше
Формат: 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()"
from typing import List, Dict, Optional
def process_users(
users: List[str],
settings: Dict[str, int],
timeout: Optional[int] = None
) -> bool:
pass
Формат: 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"];
Формат: #private или private
class MyClass {
#internalState = 0; // Приватное поле
private helperMethod() { // Приватный метод
// ...
}
}
Формат: PascalCase
type UserId = number;
type UserRole = "admin" | "user" | "guest";
interface User {
id: UserId;
name: string;
role: UserRole;
}
interface OrderData {
orderId: number;
items: Item[];
}
Формат: PascalCase
function UserProfile({ userId }: { userId: number }) {
return <div>User {userId}</div>;
}
const OrderList = () => {
return <ul>...</ul>;
};
Формат: 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"
# ...
}
Префиксы: 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"
Формат: {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
# 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(' ');
}
}
def create_user(name, email):
return User(name=name, email=email)
def build_query(table, conditions):
return f"SELECT * FROM {table} WHERE {conditions}"
def handle_order_creation(order_data):
pass
def process_payment(payment_info):
pass
# JavaScript
const handleClick = (event) => { };
const processForm = (data) => { };
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 # Форматирование скриптов
Версия: 1.0.0
Статус: active
Владелец: architect