Как стать автором
Обновить
0
0

Пользователь

Отправить сообщение
Подозреваю, что способ, описанный DaneSoul может быть полезным в случае, когда интересующие элементы кортежей расположены не в позициях 0, 1 и 2, а, скажем, в позициях 3, 7 и 16.
Хотя я бы сначала задумался о корректности выбранного подхода, если он заставляет работать с такими кортежами.
Я могу, конечно, ошибаться, но с тех пор как я поверхностно познакомился с хаскеллем, мне не перестаёт казаться, что это наоборот — промисы были ну очень сильно вдохновлены его монадой Either. А точнее, они её прямая (со скидкой на асинхронность) реализация, призванная вытащить асинхронный код из того callback-hell'а, в котором он ещё недавно пребывал. Хотя если судить по тому, что давеча завезли async/await — монады пришлись js-сообществу не очень-то по вкусу, и оно предпочло и дальше по-старинке try-catch'ить.
Для данного конкретного, естественно, if'а достаточно. Даже просто && обойтись можно. Это была просто демонстрация того, что switch требует строгого равенства, и если об этом забыть, можно получить неожиданный результат.

А сам switch(true) именно с необходимостью приводить к boolean я нередко наблюдал в ситуациях, подобных вот этой:
getSomeMeasurementAsync((err, data) => {
    switch (true) {
        case !!err:
            handleError(`Error getting measurement`, err);
            break;

        case !!data.error:
            handleError(`Measurement error`, data.error);
            break;

        default:
            handleMeasurement(data.measurement);
    }
});

Чаще всего подобное приведение к boolean встречается в конструкциях типа switch(true), т.к. switch как раз сравнивает строго:
const myVariable = 1;
switch (true) {
    case myVariable:
       console.log('Эта ветка не отработает');
       break;
    
    case !!myVariable:
        console.log('А эта отрабтает');
        break;
}
Аж даже любопытно стало вспомнить перл и написать то же самое на нём =)
$qs = sub { my ($car, @cdr) = @_; @_ == () ? () : ($qs->(grep { $_ < $car} @cdr), $_[0], $qs->(grep { $_ >= $car} @cdr)) };

Информация

В рейтинге
Не участвует
Зарегистрирован
Активность