Не уверен, что я понимаю эту вложенную троичную операцию

#conditional-operator

#условный оператор

Вопрос:

Может понадобиться некоторая помощь в понимании (или помощь с исправлениями), а также объяснение или ссылка на то, откуда вы знаете, чтобы я мог разобраться в этом, когда снова столкнусь с ними. Ни один из учебников, которые я нашел, не был ужасно полезным. Вот операция. Скобка обозначает временной ряд (массив):

 a = b==1 ? c ? d : e > a[1] ? e : a[1] : c ? d : a[1]
 

Переведенный, будет:

 a = if b==1 and c then d 
    else if e > a[1] then e 
    else a[1] 
    else if c then d
    else a[1]
 

…правильно? Если правильно, я не понимаю, как else может находиться между двумя else-ifs. Разве цепочка не перестает вычисляться после первого else? Я думал, что else по сути означает «иначе».

Ответ №1:

Я считаю, что выполнение было бы эквивалентно этому вместо b == 1 and c :

 function test() {
    if (b==1) {
        if (c) {
            return d;
        } else {
            if (e > a[1]) {
                return e;
            } else {
                return a[1];
            }
        }
    } else {
        if (c) {
            return d;
        } else {
            return a[1];
        }
    }
}

a = test();
 

Комментарии:

1. Спасибо. Какие-либо известные вам учебные пособия могут помочь в будущем?

2. @sgjohnson1981 Вот веб-сайт, который может преобразовывать троичные выражения в if-else: converter.website-dev.eu