Base/Knowledges/IT/Рефакторинг/Запахи кода/Повторяющиеся switch.md
2026-02-23 19:52:05 +03:00

29 lines
2.5 KiB
Markdown
Raw Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#рефакторинг #запахи_кода
![[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]]