← Назад к вопросам

Каких принципов ты придерживаешься при написании кода?

2.0 Middle🔥 91 комментариев
#Git и VCS#Асинхронность и многопоточность

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI22 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Принципы чистого кода

Мой подход основан на нескольких ключевых принципах, которые делают код понятным, поддерживаемым и расширяемым.

DRY (Don't Repeat Yourself)

Избегаю дублирования кода, выношу повторяющуюся логику в отдельные функции и модули:

# ❌ Плохо
def calculate_total_for_user_a():
    items = get_items()
    return sum(item.price * item.quantity for item in items)

def calculate_total_for_user_b():
    items = get_items()
    return sum(item.price * item.quantity for item in items)

# ✅ Хорошо
def calculate_total(items):
    return sum(item.price * item.quantity for item in items)

total_a = calculate_total(get_items())
total_b = calculate_total(get_items())

KISS (Keep It Simple, Stupid)

Приоритет простоте над сложностью. Нет оверинжиниринга:

# ❌ Сложное - не нужен класс для простой операции
class Calculator:
    def __init__(self):
        self.result = 0
    
    def add(self, a, b):
        self.result = a + b
        return self.result

# ✅ Просто
def add(a, b):
    return a + b

YAGNI (You Aren't Gonna Need It)

Не добавляю функционал "на будущее". Разрабатываю только то, что нужно сейчас:

# Не создаю универсальную систему плагинов, если нужна просто функция
# Не добавляю параметры, которые может когда-то потребоваться

Meaningful Names

Имена переменных, функций и классов должны быть явными и понятными:

# ❌ Непонятно
def process(d):
    return [x for x in d if x[1] > 18]

# ✅ Понятно
def get_adult_users(users):
    return [user for user in users if user.age > 18]

Small Functions

Функции должны быть небольшими и делать одно:

# ❌ Большая функция с множеством ответственности
def process_user_registration(user_data):
    validate_email(user_data["email"])
    hash_password(user_data["password"])
    send_confirmation_email(user_data["email"])
    save_to_database(user_data)
    log_registration(user_data)

# ✅ Маленькие, сфокусированные функции
def validate_user(user_data):
    return validator.validate(user_data)

def create_user(user_data):
    user = User(**user_data)
    user.set_password(user_data["password"])
    return user

def register_user(user_data):
    validate_user(user_data)
    user = create_user(user_data)
    user.save()
    send_confirmation_email(user.email)

Type Hints

Использую type hints для улучшения читаемости и ловли ошибок:

from typing import List, Optional, Dict

def get_user_emails(users: List[User]) -> List[str]:
    return [user.email for user in users]

def find_user(user_id: int) -> Optional[User]:
    return User.query.get(user_id)

PEP 8

Следую стандартам Python: 4 пробела отступа, snake_case для переменных, PascalCase для классов:

class UserRepository:  # PascalCase
    def get_user_by_email(self, email: str):  # snake_case
        pass

Comments и Docstrings

Пишу понятные комментарии и docstrings. Хороший код не нуждается в комментариях, но документация важна:

def calculate_discount(price: float, discount_percent: float) -> float:
    """Вычисляет цену со скидкой.
    
    Args:
        price: Исходная цена
        discount_percent: Процент скидки (0-100)
    
    Returns:
        Цена после применения скидки
    """
    return price * (1 - discount_percent / 100)

Error Handling

Правильная обработка ошибок без игнорирования исключений:

# ❌ Плохо
try:
    result = risky_operation()
except:
    pass

# ✅ Хорошо
try:
    result = risky_operation()
except ValueError as e:
    logger.error(f"Invalid input: {e}")
    raise
except DatabaseError as e:
    logger.error(f"Database error: {e}")
    raise

Testing First

Пишу тесты перед кодом (TDD подход) для гарантии качества и правильности:

def test_calculate_discount():
    assert calculate_discount(100, 10) == 90.0
    assert calculate_discount(200, 50) == 100.0

Эти принципы помогают создавать код, который легко читать, тестировать и поддерживать долгие годы.

Каких принципов ты придерживаешься при написании кода? | PrepBro