TGViewer
Backend Portal | Программирование Backend Portal | Программирование @backendportal · 16.1K subscribers
Post #3648 936
Не нарушайте принцип единственной ответственности

Функция должна делать одну вещь, делать её хорошо и только её.

Эта функция делает слишком много:

def calculate_final_total(
price: float,
quantity: int,
discount_rate: float,
tax_rate: float
) -> float:
# Расчёт промежуточной суммы
subtotal = price * quantity

# Применение скидки
discounted_amount = subtotal * (1 - discount_rate)

# Расчёт налога
final_total = discounted_amount * (1 + tax_rate)

return final_total


Проблема здесь в том, что расчёт промежуточной суммы, скидки и налога объединён в одну функцию. Любое изменение одного из этапов может повлиять на весь расчёт.

Лучше разбить логику на небольшие специализированные функции:

def calculate_subtotal(price: float, quantity: int) -> float:
return price * quantity

def apply_discount(subtotal: float, discount: float) -> float:
return subtotal * (1 - discount)

def calculate_tax(amount: float, tax_rate: float) -> float:
return amount * (1 + tax_rate)


Так намного лучше.

Небольшие функции с одной задачей проще покрывать модульными тестами, потому что у них меньше зависимостей и требуется меньше моков.

Кроме того, изолированные компоненты проще переиспользовать в разных частях приложения или конвейера, не подтягивая лишние зависимости.

Поэтому держите функции простыми и сфокусированными.

Одна функция — одна ответственность.

👉 @BackendPortal
More from @backendportal
  1. Sep 24, 2026Вопрос с собеседования по бэкенду В этом коде есть серьёзная уязвимость. На первый взгляд…
  2. Sep 24, 202699% путаницы между Inbound и Outbound исчезает, если перестать думать об инструментах и на…
  3. Sep 24, 2026Как AI становится чем-то большим, чем дефолтным ускорителем отдельных операцией Уже сейчас…
  4. Sep 24, 2026Вы создали composite index: (first_name, last_name, city) А затем выполнили запрос: SELECT…
  5. Sep 23, 2026Если бы пришлось заново изучать System Design в 2026 году, я бы придерживался такого roadm…
  6. Sep 23, 2026Объектное хранилище в эпоху быстрых данных Объём данных, с которыми нужно работать, растёт…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →