Запись record
Запись record в Dart - это неизменяемая структура данных,
которая позволяет объединить несколько значений разных типов
в одну переменную. Запись создаётся с помощью круглых скобок,
внутри которых через запятую перечисляются значения.
Значения могут быть как позиционными, так и именованными.
Позиционные значения передаются в порядке их следования,
а именованные - с указанием имени поля перед значением.
Записи удобны, когда нужно вернуть несколько значений
из функции или сгруппировать связанные данные без создания
отдельного класса. Доступ к позиционным полям осуществляется
через геттеры $1, $2 и так далее, а к именованным -
через их имена.
Синтаксис
// Позиционная запись
var record = (value1, value2, value3);
// Именованная запись
var record = (name1: value1, name2: value2);
// Смешанная запись
var record = (value1, name2: value2);
// Доступ к позиционным полям
record.$1;
record.$2;
// Доступ к именованным полям
record.name2;
Пример
Давайте создадим позиционную запись из трёх значений и выведем каждое из них на экран:
void main()
{
var res = (1, 'abcde', true);
print(res.$1);
print(res.$2);
print(res.$3);
}
Результат выполнения кода:
1
"abcde"
true
Пример
Давайте создадим именованную запись и обратимся к её полям по именам:
void main()
{
var res = (name: 'abcde', age: 25);
print(res.name);
print(res.age);
}
Результат выполнения кода:
"abcde"
25
Пример
Давайте создадим смешанную запись, в которой первое значение позиционное, а второе - именованное:
void main()
{
var res = (1, name: 'abcde');
print(res.$1);
print(res.name);
}
Результат выполнения кода:
1
"abcde"
Пример
Записи можно возвращать из функций. Давайте создадим функцию, которая возвращает запись с двумя значениями:
(int, String) getData()
{
return (1, 'abcde');
}
void main()
{
var res = getData();
print(res.$1);
print(res.$2);
}
Результат выполнения кода:
1
"abcde"
Пример
Записи можно деструктурировать, распаковывая их значения в отдельные переменные:
void main()
{
var (a, b, c) = (1, 'abcde', true);
print(a);
print(b);
print(c);
}
Результат выполнения кода:
1
"abcde"
true