Что такое Антипаттерн For-Case?


17

Сегодняшняя статья TDWTF начинается с признания автора:

Я не знал, что такое анти-паттерн For-Case, до относительно недавнего времени, когда было множество статей, осуждающих его как анти-паттерн. Я уверен, что я, вероятно, использовал это, в некоторый момент, но я никогда не знал это по имени . Он рассматривается как учебник антипаттерна, который обычно подразумевает недопонимание цикла for, операторов case, решаемой проблемы или некоторой комбинации всех трех.

Затем он поступает так, как будто читатель, естественно, знает, что такое анти-паттерн For-Case без каких-либо дополнительных объяснений.

Но я не! Я не видел «потока статей», о котором говорит Реми, и единственной важной ссылкой, которую я могу найти в Google (кроме статьи Реми), является сообщение в блоге Раймонда Чена об антипаттерне for-if , который, по-видимому, связан , Впрочем, он также не определяет «антишаблон для случая».

Что это за «анти-паттерн For-Case», о котором говорят эти парни, и что делает его анти-паттерном?



3
Он широко известен как (и его легче найти с помощью поисковых систем) как анти-паттерн переключателя петли
Дэвид Арно

Ответы:


23

«Шаблон» был представлен в более ранней статье Daily WTF. Основная идея заключается в том, что у вас есть forцикл caseвнутри, который выбирает на основе forиндексной переменной цикла.

Предполагая, что индексную переменную нельзя изменить внутри цикла (что не всегда верно в зависимости от того, какой язык вы используете), небольшой анализ показывает, что выполнение точно такое же, как если бы вы удалили forи caseполностью и все блоки дел были просто выполнены последовательно.


0

Проще говоря, вы вкладываете два разных метода управления потоком, что затрудняет понимание кода.

Если вы видите цикл for, вы обычно предполагаете, что условия цикла будут управлять логикой внутри цикла. Но если вы вложите в него целую инструкцию case со всей его собственной логикой, это уйдет в окно.


1
Нет ничего изначально неправильного во вложении двух структур потока управления. Иногда вам нужно. Но в этом случае это бесполезно.
Восстановить Монику

«что делает код сложнее для понимания». Мальчик, это когда-либо преуменьшение день / месяц / год.
Питер Роуэлл
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.