Що таке антипатерн "на випадок"?


17

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

Я не знав, що таке анти-візерунок For-Case до недавнього часу, коли з'явився ряд статей, які засуджують його як анти-зразок. Я впевнений, що я, певно, використовував його, в якийсь момент, але ніколи не знав цього по імені . Це вважається антипаттером підручника, який, як правило, має на увазі нерозуміння циклу, заяви справи, вирішувану проблему чи якусь комбінацію всіх трьох.

Потім він продовжує так, ніби читач, природно, знає, що таке анти-модель For-Case, не потребуючи жодних додаткових пояснень.

Але я ні! Я не бачив "ряду статей", про який розповідає Ремі, і єдиною вагомою посиланням, яку я можу знайти в Google (окрім статті Ремі), є публікація в блозі Реймонда Чена про антипатерн " якщо" , що, мабуть, пов'язане . Однак він також не визначає "анти-візерунок".

Що це за "анти-шаблон", про який говорять ці хлопці, і що робить його анти-зразком?



3
Загальновідомий як (і простіше знайти його за допомогою пошукових систем) як анти-шаблон перемикання циклу
Девід Арно

Відповіді:


23

"Шаблон" був представлений у більш ранній статті Daily WTF. Основна ідея полягає в тому, що у вас є forпетля з її caseвнутрішньою частиною, яка вибирається на основі forзмінної індексу циклу.

Якщо припустити, що змінна індексу не може бути змінена всередині циклу (що не завжди відповідає дійсності, залежно від того, якою мовою ви користуєтесь), трохи аналіз демонструє, що виконання точно таке ж, як якщо ви видалили цілком forі caseповністю і всі корпусні блоки просто виконувались послідовно.


0

Простіше кажучи, ви вкладаєте два різних способи контролю потоку, що робить код важче зрозуміти.

Якщо ви бачите цикл for, ви зазвичай припускаєте, що умови циклу керуватимуть логікою в циклі. Але якщо потім вкласти все висловлювання справи всередині своєї логіки, це виходить у вікно.


1
Немає нічого по суті не в тому, що вкладаються дві контрольні потокові структури. Іноді потрібно. Але в цьому випадку це марно.
Відновіть Моніку

"що робить код важче зрозуміти." Хлопчик, це коли-небудь заниження дня / місяця / року.
Пітер Роуелл
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.