Деструктуризация (destructuring)
dart
Деструктуризация списка List
void main() {
var positions = <int>[10, 50, 0];
// Деструктуризация всех значений
var [x, y, z] = positions;
print('$x $y $z'); // 10 50 0
// ❌ В Dart нельзя выполнять неявную частичную деструктуризацию
var [x1, y1] = positions; // Ошибка Pattern matching
// Ненужные значение можно заменить `_` (wildcard) по одному
var [x2, _, _] = positions;
// Либо через `...` целый диапазон
var [x3, ...] = positions;
var [x4, ..., z4] = positions;
// Если оставшийся диапазон нужен как отдельный список (rest в JavaScript)
var [x5, ...yz] = positions;
print(yz); // [50, 0]
}
Деструктуризация записи Record
void main() {
var positions = (10, 50, 0);
var user = (name: 'Sergey', age: 38);
var message = ('Привет!', lang: 'ru', '!!!');
// Деструктуризация всех значений
var (x, y, z) = positions;
print('$x $y $z'); // 10 50 0
// Именованные значения мы можем извлечь под другим именем.
// Если извлечь нужно под тем же именем, можно сократить запись (см `:age`)
var (name: userName, :age) = user;
print('$userName ${age}'); // Sergey 38
var (text, third, lang: language) = message;
// Обратить внимание, именованные в любом порядке,
// неименованные в порядке как идут.
print('$text ${third} ${language}'); // Привет! !!! ru
// ❌ В Dart нельзя выполнять частичную деструктуризацию записи Record
var (x1, y1) = positions; // Ошибка Pattern matching
var (name: userName) = user; // Ошибка Pattern matching
// Ненужные значение можно заменить `_` (wildcard) по одному
var (x2, _, _) = positions;
var (age: _, name: userName2) = user;
var (lang: language2, _, _) = message;
}