Was ist das For-Case-Antimuster?

17

Der heutige TDWTF-Artikel beginnt mit einem Geständnis des Autors:

Ich wusste nicht, was das For-Case-Anti-Pattern war, bis es vor relativ kurzer Zeit eine Flut von Artikeln gab, die es als Anti-Pattern verurteilten. Ich bin sicher , dass ich wahrscheinlich habe verwende es, an einem gewissen Punkt, aber ich wusste , dass es nie von Namen . Es wird als Lehrbuch-Antimuster gedacht, das im Allgemeinen ein Missverständnis von for-Schleife, case-Anweisungen, dem zu lösenden Problem oder einer Kombination aus allen dreien impliziert.

Er fährt dann fort, als ob der Leser natürlich weiß, was das For-Case-Anti-Pattern ist, ohne dass eine weitere Erklärung erforderlich ist.

Aber ich nicht! Ich habe nicht die "Flut von Artikeln" gesehen, von denen Remy spricht, und die einzige wichtige Referenz, die ich auf Google finden kann (neben Remys Artikel), ist ein Blog-Beitrag von Raymond Chen über das für-wenn- Antimuster, das anscheinend verwandt ist . Er definiert jedoch auch nicht das "Anti-Muster für den Einzelfall".

Was ist das für ein "For-Case-Anti-Pattern", von dem diese Jungs sprechen, und was macht es zu einem Anti-Pattern?

Mark Amery
quelle
3
Es ist allgemein bekannt als (und über Suchmaschinen leichter zu finden) als Loop-Switch-Anti-Pattern
David Arno

Antworten:

23

Das "Muster" wurde in einem früheren Daily WTF-Artikel vorgestellt. Die Grundidee ist, dass Sie eine forSchleife haben, deren caseInneres anhand der forSchleifenindexvariablen ausgewählt wird.

Angenommen, die Indexvariable kann in der Schleife nicht geändert werden (was je nach verwendeter Sprache nicht immer zutrifft), zeigt eine Analyse, dass die Ausführung genau so ist, als ob Sie das forund das casevollständig entfernt hätten und alle case-Blöcke wurden einfach nacheinander ausgeführt.

Mason Wheeler
quelle
0

Um es ganz einfach auszudrücken, Sie verschachteln zwei verschiedene Flusssteuerungsmethoden, wodurch der Code schwerer zu verstehen ist.

Wenn Sie eine for-Schleife sehen, gehen Sie im Allgemeinen davon aus, dass die Schleifenbedingungen die Logik innerhalb der Schleife steuern. Aber wenn Sie dann eine ganze case-Anweisung mit all ihrer eigenen Logik darin verschachteln, geht das aus dem Fenster.

Satanicpuppy
quelle
1
Das Verschachteln von zwei Kontrollflussstrukturen ist von Natur aus nichts Falsches. Manchmal muss man. Aber in diesem Fall ist es nutzlos.
Setzen Sie Monica
"Das macht den Code schwieriger zu verstehen." Junge, ist das jemals die Untertreibung des Tages / Monats / Jahres?
Peter Rowell