Ответ
Из новшеств Dart 3 я чаще всего применяю Records и Pattern Matching, так как они делают код значительно чище.
1. Records (Записи)
Идеальны для возврата нескольких значений из функции без создания лишних классов или использования пакетов вроде tuple.
// Возврат нескольких значений из функции
(String, int, bool) getUserInfo() {
return ('Alice', 30, true);
}
void main() {
var userInfo = getUserInfo();
print(userInfo.$1); // Alice (позиционный доступ)
// Деструктуризация (pattern matching в объявлении)
var (name, age, isActive) = getUserInfo();
print('$name is $age years old.');
// Именованные записи — ещё удобнее
({String name, int score}) getScore() => (name: 'Bob', score: 95);
var scoreData = getScore();
print(scoreData.name); // Bob (именованный доступ)
}
2. Pattern Matching
Крайне полезен в switch и if для декомпозиции данных и exhaustive checking.
// Обработка разных состояний виджета или данных
sealed class ApiResult {}
class Success implements ApiResult {
final String data;
Success(this.data);
}
class Failure implements ApiResult {
final String error;
Failure(this.error);
}
void handleResult(ApiResult result) {
switch (result) {
// Декомпозиция объекта прямо в case
case Success(:final data):
print('Success with data: $data');
case Failure(:final error):
print('Error: $error');
// Компилятор проверит, что все варианты sealed-класса обработаны
}
}
// Использование в if-условиях
if (userInfo case (String name, int age) when age > 18) {
print('Adult user: $name');
}
3. Class Modifiers Использую для более строгого контроля дизайна библиотек.
final class: Чтобы запретить наследование от критически важного класса, например, от состояния BLoC.sealed class: Как в примере выше, для создания закрытых иерархий, которые идеально работают с pattern matching.
4. Обязательный Null Safety Все новые и поддерживаемые проекты теперь строго используют null safety, что исключает целый класс ошибок на этапе разработки.
Эти фичи не просто синтаксический сахар — они позволяют писать более выразительный, безопасный и легко рефакторимый код.