Jeśli to sprawia, że Twój kod trudniejsze do odczytania, to jest złe ćwiczyć.
Niezależnie od tego, czy tak jest w danym przykładzie, decyzja należy do Ciebie, ale generalnie powiedziałbym, że prawdopodobnie tak by było.
Pytałeś alternatyw ...
Extract niektóre kodu do sub-funkcji. Np:
case 'foo' :
myVar = 'blah';
break;
case 'bar' :
myVar = secondLevelFunction();
break;
Tutaj secondLevelFunction()
zawiera dodatkowe switch()
oświadczenie gdzie każdy case
zwraca wartość myVar
.
Użyj mapowania tablicowego.Np:
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];
Ponadto, jeśli szukasz konkretnych miar jakości kodu, należy dowiedzieć się o Cyclomatic Complexity. Jest to miara złożoności funkcji. Pomiar jest dokonywany poprzez sprawdzenie, ile "punktów decyzyjnych" posiada funkcja. Każda pętla case
, if
jest "punktem decyzyjnym". Im więcej masz, tym bardziej złożona jest twoja funkcja.
Złożoność cykliczna jest silnie związana z jakością kodu i dobrymi praktykami kodowania, więc jeśli twoja funkcja ma wysoki wynik CC (co prawdopodobnie zrobi, jeśli ma wiele zagnieżdżonych bloków switch
), jest to oznaka słabej jakości kodu . Oba rozwiązania alternatywne opisane powyżej mogą pomóc w tym. Zostawię to dla ciebie, aby przeczytać więcej na temat CC.
Oczywiście alternatywne rozwiązania musiałyby być dostosowane do twoich potrzeb, ale mam nadzieję, że dadzą ci kilka pomysłów.
Widzę przypadki, w których jest OK. Ale wpatrywałam się w to długo i sprawdziłam, czy mogę znaleźć prostszą technikę. –
Nie w rzeczywistości dupe, ale ma istotne/interesujące informacje: http://stackoverflow.com/questions/7807970/nesting-switch-cases-in-javascript-any-speed-advantage – Joum
Aby uzyskać odpowiednie odpowiedzi, lepiej byłoby dodaj swój kod do pytania ... –