⚖️ Старый подход vs современная практика

⚡ Кратко

Старый подход часто использует вложенные if, from module import * и сравнение float через ==. Современная практика предпочитает плоские структуры, guard clauses, явный импорт, math.isclose() и Decimal.

Вложенные условия vs плоские структуры

🕰️ Старый подход

def check_access(role, has_access):
    if role == "admin":
        if has_access:
            return "Разрешено"
        else:
            return "Запрещено"
    else:
        return "Нет прав"

✨ Современная практика

def check_access(role, has_access):
    if role != "admin":
        return "Нет прав"
    if not has_access:
        return "Запрещено"
    return "Разрешено"
💡 Почему лучше: guard clauses уменьшают вложенность, код читается сверху вниз как список правил. Меньше отступов — меньше когнитивной нагрузки.

Цепочные сравнения vs вложенные условия

🕰️ Старый подход

if x >= 0:
    if x <= 100:
        print("В диапазоне")
    else:
        print("Слишком большое")
else:
    print("Отрицательное")

✨ Современная практика

if x < 0:
    print("Отрицательное")
elif x > 100:
    print("Слишком большое")
else:
    print("В диапазоне")
💡 Почему лучше: цепочка if-elif-else с guard clauses сразу показывает все случаи. Для проверки диапазона можно также использовать 0 <= x <= 100.

Импорт модулей

🕰️ Старый подход

from math import *

print(sqrt(16))
print(pi)

✨ Современная практика

import math

print(math.sqrt(16))
print(math.pi)
💡 Почему лучше: явный импорт позволяет понять, откуда взялась функция, и избежать конфликтов имён. from module import * засоряет пространство имён и усложняет отладку.

Сравнение float

🕰️ Старый подход

a = 0.1 + 0.2
if a == 0.3:
    print("Равно")
else:
    print("Не равно")  # сюда попадём

✨ Современная практика

import math

a = 0.1 + 0.2
if math.isclose(a, 0.3):
    print("Равно")
else:
    print("Не равно")
💡 Почему лучше: math.isclose() учитывает погрешность представления float и даёт корректный результат для вычисленных значений.

Денежные расчёты

🕰️ Старый подход

price = 0.1
total = price * 3
print(total)  # 0.30000000000000004

✨ Современная практика

from decimal import Decimal

price = Decimal('0.1')
total = price * 3
print(total)  # 0.3
💡 Почему лучше: Decimal хранит десятичные дроби точно. Для финансовых расчётов это стандарт де-факто.

Тернарный оператор vs полноценный if

🕰️ Старый подход

if age >= 18:
    status = "Взрослый"
else:
    status = "Ребёнок"

✨ Современная практика

status = "Взрослый" if age >= 18 else "Ребёнок"
💡 Почему лучше: для простого выбора между двумя значениями тернарный оператор короче и яснее. Для сложной логики лучше оставить обычный if-else.