Конструкция switch по образцу в Dart
В switch вместо константы в case
можно указать образец. Ветка с командами,
как и при обычном выборе по числу, в конце
заканчивается break. Здесь важна форма
значения и отдельные поля, а не только
равенство одному литералу.
Разбор объекта Post по полям:
class Post {
Post(this.title, this.likes);
final String title;
final int likes;
}
var post = Post("note", 3);
switch (post) {
case Post(likes: 0):
print("empty");
break;
case Post(title: var title):
print(title);
break;
}
Тот же прием работает для списка. Сначала проверяют короткий список, затем берут голову и хвост:
var nums = [1, 2, 3];
switch (nums) {
case []:
print("none");
break;
case [var only]:
print(only);
break;
case [var head, ...var tail]:
print(head);
print(tail.length);
break;
}
Дан следующий код:
class Employee {
Employee(this.name, this.years);
final String name;
final int years;
}
var worker = Employee("kim", 0);
В switch выведите "new",
если years равен нулю, иначе выведите
имя через образец с полем name.
Дан следующий код:
var pack = [6, 1];
В switch по списку выведите "pair",
если элементов ровно два, и "other"
в остальных случаях.