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
geoLocationabove (a record consisting of a pair of ints) into two individualintvariables,latandlong, 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 (записи)