Почему операторы OR не работают в операторах Switch - PullRequest
1 голос
/ 30 апреля 2020

Java Оператор переключения - возможны ли "или" / "и"?

Существует довольно много ответов, подобных приведенным выше, которые дают хорошие альтернативы использованию этого ошибочного синтаксиса в мой пример, но я не читал объяснение, почему это не работает:

const switchExample = (val) => {
    switch(val) {
        case 'a' || 'b' || 'c':
        return 'first 3'
        break;
        case 'd':
        return 'fourth'
        break;
        default:
        return 'default'
    }
}

Вызов с 'b' или 'c' в качестве параметра вернет значение по умолчанию. Принимая во внимание, что «a» вернет (как и ожидалось) «первые 3». Я ожидал, что если «b» будет правдой, то в первом случае будет получено значение «истина» и будет возвращено «первые 3», но это не так. Может кто-нибудь объяснить, почему?

Ответы [ 2 ]

0 голосов
/ 30 апреля 2020

Здесь

    switch(val) {
        case 'a' || 'b' || 'c':

сначала будет оценено значение выражения 'a' || 'b' || 'c' ('a'), а затем switch проверит, соответствует ли val case.

Вам нужно сделать альтернативу следующим образом:

    switch(val) {
        case 'a':
        case 'b':
        case 'c':
            return 'first 3';
        case 'd':
// ...
0 голосов
/ 30 апреля 2020

Это не работает, потому что первое истинное значение берется с помощью логического ИЛИ || для строгого сравнения.

В качестве альтернативы, вы можете использовать сбой подхода с тремя случаями в строке, как

const
    switchExample = (val) => {
        switch(val) {
            case 'a':
            case 'b':
            case 'c':
                return 'first 3'; // no break required, because return ends the function
            case 'd':
                return 'fourth';
            default:
                return 'default';
        }
    }
...