Введение в класс-значение в Dart
Класс-значение - тип, который держит набор связанных полей: заголовок и число лайков записи, координаты точки, код товара и цена. Такие значения передают между функциями, кладут в списки и карты, сравнивают между собой, не меняя исходный объект.
Обычный class Post с полями в конструкторе
уже знаком по разделу про классы и поля. Для двух
экземпляров с одинаковыми полями оператор ==
без своей реализации сравнивает ссылки, а вывод
в консоль не показывает поля, пока не написать
toString вручную. Для записей-контейнеров
это лишняя работа на каждый тип.
Класс-значение задают явно: поля делают final,
конструктор часто помечают const, а методы
toString, operator ==, hashCode
и copyWith пишут сами - в Dart ничего из этого
не генерируется автоматически. Если у значения нет
методов, кроме доступа к полям, в языке уже есть
запись из раздела для начинающих - ее достаточно.
После создания объект ведет себя как контейнер данных: поля доступны по точке, лишней логики в типе нет. Класс-значение не заменяет иерархии с наследованием и абстрактные классы - он дополняет их там, где важнее содержимое полей, чем поведение отдельного типа.