Что выведет код Middle Dart: типы и null-safety обновлено

Dart: switch с patterns и guard

Вопрос

Что выведет программа? По строке на каждый вывод.

String describe(Object o) => switch (o) {
      int n when n < 0 => 'отрицательное',
      int n => 'int $n',
      [var a, var b] => 'пара $a,$b',
      [var a, ...] => 'список с $a',
      String s => 'строка ${s.length}',
      _ => 'другое',
    };

void main() {
  print(describe(-5));
  print(describe(3));
  print(describe([1, 2]));
  print(describe([1, 2, 3]));
  print(describe('abc'));
  print(describe(1.5));
}

Попробуйте сами

Напишите, что выведет код: каждый вывод с новой строки.

Показать ответ и разбор

Коротко

Код выведет: отрицательное, int 3, пара 1,2, список с 1, строка 3, другое. Ветки проверяются сверху вниз, берётся первая подходящая. -5 попадает под guard when n < 0.

Что выведет

отрицательное
int 3
пара 1,2
список с 1
строка 3
другое

Разбор

Ветки проверяются сверху вниз, берётся первая подходящая. -5 попадает под guard when n < 0. Список из двух элементов совпадает с [var a, var b], из трёх только с rest-паттерном [var a, ...]. 1.5 это double, не int, и уходит в _.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.