Qu'est-ce que l'antipattern For-Case?

17

L'article TDWTF d'aujourd'hui commence par une confession de l'auteur:

Je ne savais pas ce qu'était l'anti-motif For-Case jusqu'à relativement récemment, quand il y avait une série d'articles le condamnant comme anti-motif. Je suis sûr que je l'ai probablement utilisé à un moment donné, mais je ne l'ai jamais connu par son nom . Il est considéré comme un contre-modèle de manuel qui implique généralement une mauvaise compréhension de la boucle for, des déclarations de cas, du problème à résoudre ou d'une combinaison des trois.

Il procède ensuite comme si le lecteur savait naturellement ce qu'est l'anti-motif For-Case sans qu'aucune autre explication ne soit nécessaire.

Mais non! Je n'ai pas vu la "série d'articles" dont parle Remy, et la seule référence significative que je puisse trouver sur Google (en plus de l'article de Remy) est un article de blog de Raymond Chen sur l' anti - motif for-if , qui est apparemment lié . Il ne définit pas non plus "l'anti-motif pour le cas".

Quel est cet "anti-motif For-Case" dont ces gars parlent, et qu'est-ce qui en fait un anti-motif?

Mark Amery
la source
3
Il est communément appelé (et plus facile à trouver via les moteurs de recherche) comme l' anti-modèle de commutateur de boucle
David Arno

Réponses:

23

Le "modèle" a été introduit dans un article antérieur du Daily WTF. L'idée de base est que vous avez une forboucle avec un caseintérieur qui sélectionne en fonction de la forvariable d'index de boucle.

En supposant que la variable d'index ne peut pas être changé à l' intérieur de la boucle, ( ce qui est pas toujours vrai, selon la langue que vous utilisez,) un peu d'analyse démontre que l'exécution est exactement le même que si vous avez supprimé le foret caseentièrement et tous les blocs de cas ont été simplement exécutés séquentiellement.

Mason Wheeler
la source
0

Pour le dire très simplement, vous imbriquez deux méthodes de contrôle de flux différentes, ce qui rend le code plus difficile à comprendre.

Si vous voyez une boucle for, vous supposez généralement que les conditions de la boucle contrôleront la logique dans la boucle. Mais si vous imbriquez ensuite une instruction case entière à l'intérieur, avec toute sa propre logique, cela sort par la fenêtre.

Satanicpuppy
la source
1
Il n'y a rien de mal à imbriquer deux structures de flux de contrôle. Parfois, vous en avez besoin. Mais dans ce cas, c'est inutile.
Rétablir Monica
"ce qui rend le code plus difficile à comprendre." Boy, c'est que jamais l'euphémisme du jour / mois / année.
Peter Rowell