findviewbyid не работает

У вас есть как минимум четыре варианта:

1. Список каждого case

Как , показанный LightStyle , вы можете явно указать каждый случай:

switch(myInterval){

    case 0:
    case 1:
    case 2:
        doStuffWithFirstRange();
        break;

    case 3:
    case 4:
    case 5:
        doStuffWithSecondRange();
        break;

    case 6:
    case 7:
        doStuffWithThirdRange();
        break;

    default:
        doStuffWithAllOthers();
}

2. Используйте if / else if / else

Если диапазоны большие, это становится громоздким, поэтому вы хотите делать диапазоны. Обратите внимание, что с if...else if...else if вы не дойдете до более поздних, если предыдущий будет соответствовать, поэтому вам нужно только каждый раз указывать верхнюю границу. Я буду включать нижнюю границу в /*...*/ для ясности, но обычно вы можете оставить ее, чтобы избежать введения проблемы обслуживания (если вы включаете обе границы, легко изменить ее и забыть изменить другую):

if (myInterval < 0) {
    // I'm guessing this is an error
}
else if (/* myInterval >= 0 && */ myInterval <= 2){
    doStuffWithFirstRange();
}
else if (/* myInterval >= 3 && */ myInterval <= 5) {
    doStuffWithSecondRange();
}
else if (/* myInterval >= 6 && */ myInterval <= 7) {
    doStuffWithThirdRange();
}
else {
    doStuffWithAllOthers();
}

3. Используйте case с выражениями:

JavaScript необычен тем, что вы можете использовать выражения в выражении case, поэтому мы можем записать последовательность if...else if...else if выше как выражение switch:

switch (true){

    case myInterval < 0:
        // I'm guessing this is an error
        break;    
    case /* myInterval >= 0 && */ myInterval <= 2:
        doStuffWithFirstRange();
        break;

    case /* myInterval >= 3 && */ myInterval <= 5:
        doStuffWithSecondRange();
        break;

    case /* myInterval >= 6 && */ myInterval <= 7:
        doStuffWithThirdRange();
        break;

    default:
        doStuffWithAllOthers();
}

Я не сторонник этого, но он является вариантом в JavaScript, и иногда это полезно. Операторы case проверяются в порядке от значения, которое вы даете в switch. (И снова нижние границы могут быть опущены во многих случаях, потому что они бы соответствовали ранее.) Несмотря на то, что case s обрабатываются в порядке исходного кода, default может отображаться в любом месте ( а не только в конце) и обрабатывается только в том случае, если либо нет case s, либо case соответствует и проваливается до значения по умолчанию (не было break; редко вы хотите это сделать, но это происходит).

4. Используйте карту отправки

Если ваши функции все принимают одни и те же аргументы (и это может быть не аргумент или только те же), другой подход - это карта отправки:

В некоторых

var dispatcher = {
    0: doStuffWithFirstRange,
    1: doStuffWithFirstRange,
    2: doStuffWithFirstRange,

    3: doStuffWithSecondRange,
    4: doStuffWithSecondRange,
    5: doStuffWithSecondRange,

    6: doStuffWithThirdRange,
    7: doStuffWithThirdRange
};

Затем вместо переключателя:

(dispatcher[myInterval] || doStuffWithAllOthers)();

Это работает, просматривая функцию для вызова карты dispatcher, по умолчанию doStuffWithAllOthers если для этого конкретного значения myInterval нет записи с использованием любопытно-мощного || оператора , а затем его вызова.

Вы можете разбить это на две строки, чтобы сделать это немного яснее:

var f = dispatcher[myInterval] || doStuffWithAllOthers;
f();

Я использовал объект для максимальной гибкости. Вы могли бы определить dispatcher, как это, в вашем конкретном примере:

var dispatcher = [
    /* 0-2 */
    doStuffWithFirstRange,
    doStuffWithFirstRange,
    doStuffWithFirstRange,

    /* 3-5 */
    doStuffWithSecondRange,
    doStuffWithSecondRange,
    doStuffWithSecondRange,

    /* 6-7 */
    doStuffWithThirdRange,
    doStuffWithThirdRange
];

... но если значения не являются смежными числами, гораздо яснее использовать объект вместо этого.

0
задан TofferJ 4 August 2017 в 18:03
поделиться