1. Деструктуризация с помощью паттернов
Пример с Records:
var user = ('Naman', 29);
var (name, age) = user;
print(name);
print(age);
2. Деструктуризация объектов
Есть класс:
class User {
final String name;
final int age;
User(this.name, this.age);
}
Можно извлечь свойства так:
var User(:name, :age) = user;
Это эквивалентно:
var name = user.name;
var age = user.age;
3. Pattern Matching в switch
Традиционный подход:
if (state is Success) {
final data = state.data;
}
Подход с pattern matching
switch (state) {
case Success(data: var data):
render(data);
case Loading():
showLoader();
case Error(message: var msg):
showError(msg);
}
4. Сопоставление коллекций
Паттерны умеют анализировать списки и map:
switch(list) {
case []:
print("Empty");
case [first, second]:
print(first);
}
switch(json) {
case {'status': 'ok', 'data': var d}:
process(d);
case {'status': 'error', 'message': var m}:
showError(m);
}
5. Guard-условия
switch(user) {
case User(age: var age) when age > 18:
print("Adult");
case _:
print("Minor");
}
А вы используете pattern matching?
