Если это делает ваш код труднее читать, то это плохо практика.
Независимо от того, подходит ли это вашему конкретному примеру, решать вам, но в целом я бы сказал, что, вероятно, так будет.
Вы просили альтернативы ...
Extract часть вашего кода в подфункции. Например:
case 'foo' :
myVar = 'blah';
break;
case 'bar' :
myVar = secondLevelFunction();
break;
Здесь secondLevelFunction()
содержит дополнительный switch()
заявление, в котором каждый case
возвращает значение myVar
.
Использование сопоставления массива.Например:
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];
Кроме того, если вы ищете конкретные меры качества кода, вы должны узнать о Cyclomatic Complexity. Это показатель того, насколько сложна функция. Измерение производится путем просмотра того, сколько «точек принятия решений» имеет функция. Каждый case
, if
, цикл и т. Д. Является «точкой принятия решения». Чем больше у вас есть, тем сложнее ваша функция.
Cyclomatic Complexity тесно связан с качеством кода и хорошими правилами кодирования, поэтому, если ваша функция имеет высокий балл CC (что, вероятно, будет делать, если у него много вложенных блоков switch
), то это признак плохого качества кода , Оба альтернативных решения, описанные выше, могут помочь в этом. Я оставлю это вам, чтобы больше узнать о CC.
Очевидно, что альтернативные решения должны быть адаптированы к вашим потребностям, но, надеюсь, они дают вам некоторые идеи.
Я вижу случаи, когда все в порядке. Но я долго смотрел на него и видел, могу ли я найти более простой метод. –
На самом деле не обман, но имеет соответствующую/интересную информацию: http://stackoverflow.com/questions/7807970/nesting-switch-cases-in-javascript-any-speed-advantage – Joum
Чтобы получить соответствующие ответы, было бы лучше добавьте свой код к вопросу ... –