Проведи рефакторинг легаси-функции по шагам, сохранив поведение до последней ветки.
Язык и версия: [ЯЗЫК: Python 3.11]
Код (свой вставь вместо этого, пример рабочий):
[КОД: def calc(u, t, d=None): if u is not None: if t == 'new': p = 100 if d: p = p - d if u.get('vip'): p = p * 0.9 return p elif t == 'old': p = 80 if d: p = p - d if u.get('vip'): p = p * 0.9 return p return 0]
Чем покрыт: [ТЕСТЫ: тестов нет, функция вызывается из двух мест — корзина и админка]
Что нужно:
1. Что функция делает на самом деле — 3–5 строк, включая поведение на краях (u = None, d больше цены).
2. Список проблем с приоритетом: что ломает читаемость, а что реально опасно.
3. Рефакторинг шагами: ОДНО изменение за шаг, после каждого — что изменилось и почему поведение
осталось прежним. Не больше шести шагов.
4. Финальная версия целиком.
5. Тесты, которые доказывают эквивалентность старой и новой версии, включая краевые случаи из пункта 1.
Отсечка. Не выдавай сразу «вот красивая новая версия» — без промежуточных шагов такой рефакторинг
невозможно ни проверить, ни откатить по частям. Не меняй поведение молча: если в старом коде скидка
может уронить цену ниже нуля, а в новом нет, это отдельной строкой «изменение поведения», а не тихая
правка. Не дроби на функции из одной строки и не тащи паттерны ради паттернов — стратегия и фабрика
на две ветки условия хуже, чем понятный if.
Проверка перед выдачей: прогони мысленно старую и новую версию на наборах (None, 'new', None),
({'vip': True}, 'old', 200), ({}, 'unknown', 0). Совпали результаты — выдавай, разошлись — правь.