#рефакторинг #методы_рефакторинга ![[Pasted image 20250207084312.png]] ### **Проблема** У вас есть сложный условный оператор (`if-then`/`else` или `switch`). ```typescript if (date.before(SUMMER_START) || date.after(SUMMER_END)) { charge = quantity * winterRate + winterServiceCharge; } else { charge = quantity * summerRate; } ``` ### **Решение** Выделите в отдельные методы все сложные части оператора: условие, `then` и `else`. ```typescript if (isSummer(date)) { charge = summerCharge(quantity); } else { charge = winterCharge(quantity); } ``` ### **Причины рефакторинга** Чем длиннее кусок кода, тем сложнее понять, что он делает. Все усложняется ещё больше, когда код щедро приправлен условными операторами: - пока вы разберётесь в том, что делает код в then, вы забываете, какое условие стояло в операторе; - пока вы разбираетесь с else, вы забываете, что делал код в then. ### **Достоинства** - Извлекая код условного оператора в методы с понятным названием, вы упрощаете жизнь тому, кто впоследствии будет этот код поддерживать (зачастую вам самим через месяц или два). - Рефакторинг применим и для коротких выражений в условиях оператора. Строка `isSalaryDay()` куда наглядней опишет то, что она делает, чем код сравнения дат. ### **Порядок рефакторинга** 1. Выделите условие в отдельный метод с помощью [[Извлечение функции (Extract Function)]]. 2. Повторите выделение для `then` и `else` части оператора. ### **Борется с запахом** - [[Длинная функция]] ### **Ссылки** - https://refactoring.guru/ru/decompose-conditional - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]