Comments 14
А скажите честно: чтобы написать исходный вариант кода – вы взяли конечный и потрясли как следует?
Исходный вариант метода — это, грубо говоря, наивная реализация. Чтобы такое написать, необязательно знать толк в извращениях.
Любопытно.
Просто по моему опыту структура if-ов обычно диктуется задачей – и для вашей модельной задачи будет последний вариант.
Бывает, что полученную из задачи структуру можно оптимизировать – но, как правило, делать это невыгодно с точки зрения дальнейшей поддержки: реализация каких-то случаев может не различаться сегодня, но её потребуется изменить завтра. И тут уж лучше будет не оптимизировать код руками, а оставить это на откуп компилятору.
Впрочем, есть ещё один случай получения неоптимальной структуры кода – исторические наслоения. Тут да, один из шагов рефакторинга можно провести по вашей схеме (или лучше в середине схемы воспользоваться картами карно), а потом уже подумать, что получилось :-) – в смысле, восстановить логику по коду.
Лично я, если нужно работать с сложным разветвленным выражением содержащее кучу if, делаю это (на Питоне) в виде таблицы, прдставляющей из себя словарь, где ключами служат массивы булевых переменных, а значениями — имена методов, которые выполняют нужные действия. то позволяет кроме прочего, сразу иметь таблицу всех комбинаций входных параметров. Для использования этой таблицы сначала вычисляем ключ, булевые переменные ключа это значения условий в исходных if-ах, а потом по ключу из словаря получаем нужный метод.
Не ради холивара, но я ещё раз вспомнил, за что люблю питон — и за отсутствие кучи скобочек в том числе.
Не заблудиться в трёх if'ах. Рефакторинг ветвящихся условий