Se si rende il codice più difficile da leggere, allora è male pratica.
Se questo è il caso nel vostro esempio, dipende da voi decidere, ma in generale direi che probabilmente sarebbe il caso.
hai chiesto di alternative ...
estrarre alcune del codice in un sub-funzioni. Ad esempio:
case 'foo' :
myVar = 'blah';
break;
case 'bar' :
myVar = secondLevelFunction();
break;
Qui, il secondLevelFunction()
contiene l'ulteriore switch()
dichiarazione in cui ogni case
restituisce un valore per myVar
.
Utilizzare la mappatura dell'array.Ad esempio:
var mapper = {'foo':'blah', 'bar':'bibble', etc};
//now, instead of a big switch(input) { .... } block that sets myVar
//for each option, you can just set it directly in a single line, like so:
var myVar = mapper[input];
Inoltre, se siete alla ricerca di misure concrete di qualità del codice, si dovrebbe conoscere Cyclomatic Complexity. Questa è una misura di quanto sia complessa una funzione. La misurazione è presa considerando quanti "punti decisionali" ha la funzione. Ogni case
, if
, loop, ecc. È un "punto di decisione". Più hai, più complessa è la tua funzione.
complessità ciclomatica è stronly legata alla qualità del codice e le buone pratiche di codifica, quindi se la vostra funzione ha un punteggio elevato CC (che probabilmente farà se si dispone di più nidificati switch
blocchi), allora è un segno di scarsa qualità del codice . Entrambe le soluzioni alternative che ho descritto sopra possono aiutare con questo. Lascio a te di leggere di più su CC.
Ovviamente le soluzioni alternative dovrebbero essere adattate alle vostre esigenze, ma si spera che vi diano alcune idee.
Posso vedere i casi in cui è OK. Ma lo guarderei piuttosto a lungo e vedrei se riuscirò a trovare una tecnica più semplice. –
In realtà non è un problema, ma ha informazioni rilevanti/interessanti: http://stackoverflow.com/questions/7807970/nesting-switch-cases-in-javascript-any-speed-advantage – Joum
Per ottenere risposte pertinenti sarebbe meglio aggiungi il tuo codice alla domanda ... –