Открыв пет, снова встретил собственную функцию на полэкрана: 60 строк, всё вперемешку, без возможности понять — «что тут происходит». Гнев на прошлого себя утих, когда я взял правило: дробить по смыслам, каждый смысл — отдельная маленькая функция с именем-действием.
Нейтрально: читаемость растёт, когда логика разбита на короткие шаги. Длинная функция почти всегда делает три-четыре дела сразу; разведя их, легче тестировать отдельно.
def load_fresh_items(limit):
# Собиралось в одном теле 60 строк — разбили на шаги
return get_recent(limit) # фильтр + сортировка
def get_recent(limit=10):
return Item.objects.filter(active=True).order_by("-created")[:limit]
# клиент вызывает осмысленно:
for item in get_recent(5):
...
Удовлетворение пришло не от «красоты», а от того, что код снова можно объяснить по шагам — а значит, и на интервью. Рефакторинг перестал быть страшной «переделкой» — стал обычной гигиеной.