Che cos'è Antipattern For-Case?

17

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

I didn’t know what the For-Case anti-pattern was until relatively recently, when there were a spate of articles condemning it as an anti-pattern. I’m sure I’ve probably used it, at some point, but I never knew it by name. It’s thought of as a textbook antipattern that generally implies a misunderstanding of for loop, case statements, the problem being solved, or some combination of all three.

Quindi procede come se il lettore, naturalmente, sapesse quale sia l'anti-pattern di For-Case senza ulteriori spiegazioni.

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

Che cos'è questo "anti-pattern For-Case" di cui parlano questi ragazzi, e cosa lo rende anti-pattern?

    
posta Mark Amery 10.05.2017 - 14:56
fonte

2 risposte

23

Il "pattern" è stato introdotto in un precedente articolo del Daily WTF. L'idea di base è che tu abbia un for loop con case al suo interno che si seleziona in base alla variabile di indice del ciclo for .

Supponendo che la variabile dell'indice non possa essere cambiata all'interno del ciclo, (che non è sempre vera, a seconda della lingua che stai usando,) un po 'di analisi dimostra che l'esecuzione è esattamente la stessa di quella che hai rimosso for e case interamente e tutti i blocchi dei casi sono stati semplicemente eseguiti in modo sequenziale.

    
risposta data 10.05.2017 - 15:48
fonte
0

Per dirla in modo molto semplice, stai nidificando due diversi metodi di controllo del flusso, il che rende il codice più difficile da capire.

Se vedi un ciclo for, generalmente ritieni che le condizioni del ciclo controlleranno la logica all'interno del ciclo. Ma se poi annidi un'intera case statement all'interno, con tutta la sua logica, che esce dalla finestra.

    
risposta data 10.05.2017 - 15:51
fonte

Leggi altre domande sui tag