Comments 9
Деструктиризация есть?
Where records allow you to combine data, patterns can destructure composite data into its constituents. For example, to destructure the return value of
geoLocation
above (a record consisting of a pair of ints) into two individualint
variables,lat
andlong
, you can use a pattern declaration like this:
void main(List<String> arguments) {
final (lat, long) = geoLocation('Nairobi');
print('Current location: $lat, $long');
}
Делает ли это код более грязным? Не логичнее было бы сделать упрощённое созданиие классов типа class Location(int lat, int lon) наподобие Котлину?
Самое важное ни где не упомянуто - это работает только в альфа 3.0
Хочется уже data-классов и забыть про freezed.
В Dart же записи могут иметь только позиционные параметры, либо только именованные, либо и то и другое
Это как вообще?
Ну таки вот:
(int, bool) onlyPos;
(String name) onlyRec;
(int, String name, bool) posAndRec;
Это была ошибка. Правильный вариант вот такой:
(int, bool) onlyPos;
(String name,) onePos;
({String name}) oneRec;
(int, String name, {bool count}) posAndRec;
onlyPos.$1;
onlyPos.$2;
onePos.$1;
oneRec.name;
posAndRec.$1;
posAndRec.$2;
posAndRec.count;
Тип record, содержащий ровно одно позиционное поле, требует завершающей запятой. Для именованных полей это не имеет значение.
Получение позиционных полей идёт с $1 и далее.
Также стоит заметить, что для позиционных полей можно не указывать имя. Оно влияет только на документацию (и понимание кода).
Актуальную спецификацию можете посмотреть здесь - Records Feature Specification
Новая фича в Dart — Records (записи)