#рефакторинг #запахи_кода ![[Pasted image 20241112225742.png]] > Инструкция switch — вовсе не красный флаг. > Когда одна и та же условная логика (либо в switch/case, либо в каскаде if/else) появляется в разных местах, проблема состоит в том, что всякий раз, когда вы добавляете ветвь, вы должны найти все инструкции switch и обновить их. Полиморфизм обеспечивает элегантное оружие против темных сил такого повторения. ### **Признаки** - У вас есть сложный оператор `switch` или последовательность `if`-ов ### **Причины появления** Одним из очевидных признаков объектно-ориентированного кода служит сравнительно редкое использование операторов типа switch или case. Часто один и тот же блок switch оказывается разбросанным по разным местам программы. При добавлении в него нового варианта приходится искать все эти блоки switch и модифицировать их. Как правило, заметив блок switch, следует подумать о полиморфизме. ### **Рефакторинги** - [[Замена условной инструкции полиморфизмом (Replace Conditional with Polymorphism)]] ![[Pasted image 20241112225751.png]] ### **Результат** - Улучшает организацию кода ### **Не стоит трогать, если...** - Когда оператор `switch` выполняет простые действия, нет никакого смысла что-то менять в коде - Зачастую оператор switch используется в фабричных паттернах проектирования (**Фабричный метод**, **Абстрактная фабрика**) для выбора создаваемого класса. ### **Ссылки** - [https://refactoring.guru/ru/smells/switch-statements](https://refactoring.guru/ru/smells/switch-statements) - [[Мартин Фаулер - Рефакторинг кода на JavaScript]]