Что выведет код 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 ошибок.