Cos'è l'antipattern For-Case?


17

L'articolo TDWTF di oggi inizia con una confessione dell'autore:

Non sapevo quale fosse l'antimodello For-Case fino a tempi relativamente recenti, quando c'erano una serie di articoli che lo condannavano come anti-schema. Sono sicuro che probabilmente l'ho usato , ad un certo punto, ma non l'ho mai saputo per nome . È pensato come un antipasto da manuale che generalmente implica un fraintendimento di loop, dichiarazioni di casi, risoluzione del problema o una combinazione di tutti e tre.

Quindi procede come se il lettore, naturalmente, sapesse cos'è l'anti-pattern For-Case senza che siano necessarie ulteriori spiegazioni.

Ma io no! Non ho visto la "serie di articoli" che Remy parla, e il riferimento unico significativo che posso trovare su Google (oltre l'articolo di Remy) è un post sul blog di Raymond Chen circa la for-se antipattern, che apparentemente correlata . Tuttavia, non definisce neanche "l'anti-pattern for case".

Cos'è questo "Anti-pattern For-Case" di cui stanno parlando questi ragazzi, e cosa lo rende un anti-pattern?



3
È comunemente noto (e più facile da trovare tramite i motori di ricerca) come l' anti-pattern loop-switch
David Arno,

Risposte:


23

Il "modello" è stato introdotto in un precedente articolo del Daily WTF. L'idea di base è che hai unfor ciclo con un caseinterno che lo seleziona in base alla forvariabile dell'indice del ciclo.

Supponendo che la variabile indice non possa essere modificata all'interno del ciclo, (che non è sempre vero, a seconda della lingua che stai usando), un po 'di analisi dimostra che l'esecuzione è esattamente la stessa di se hai rimosso il fore il casetutto e tutti i blocchi case sono stati semplicemente eseguiti in sequenza.


0

Per dirla molto semplicemente, stai annidando due diversi metodi di controllo del flusso, il che rende il codice più difficile da capire.

Se vedi un ciclo for, generalmente supponi che le condizioni del ciclo controllino la logica all'interno del ciclo. Ma se poi annidi al suo interno un'intera istruzione case, con tutta la sua logica, quella esce dalla finestra.


1
Non c'è nulla di intrinsecamente sbagliato nell'annidamento di due strutture di flusso di controllo. A volte è necessario. Ma in questo caso è inutile.
Ripristina Monica

"che rende il codice più difficile da capire." Ragazzo, è sempre l'eufemismo del giorno / mese / anno.
Peter Rowell,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.