Введение в enum и sealed в Dart
Ограниченный набор вариантов часто встречается в
программе: статус заказа, день недели, результат запроса,
состояние экрана. Если хранить такие значения простой
строкой или числом, легко передать лишнее значение и
пропустить его при разборе. Dart дает два родственных
способа описать набор заранее: enum и
sealed class.
Ключевое слово enum перечисляет фиксированные константы
одного типа. У каждой константы одно имя в коде, все
они известны компилятору, их удобно сравнивать и
перебирать. В начальном курсе мы уже объявляли простое
перечисление без полей; в этом разделе добавим параметры
конструктора, методы и разбор через switch.
Ключевое слово sealed class тоже ограничивает круг возможных
типов, но каждый вариант может нести свои данные:
успех с текстом, ошибка с кодом, загрузка без полей.
Подтипы объявляют в том же файле, поэтому
компилятор знает полный список вариантов так же, как
для enum. Это удобно для ответов API, шагов мастера,
дерева выражений, где у разных веток разная форма данных.
Оба механизма сочетаются с switch и проверкой
типа так же, как иерархии с обычным наследованием:
если перечислены все варианты, ветку default часто
можно не писать. Enum удобен, когда нужны только метки
или общие поля у всех констант; sealed - когда подтипы
наследуют общий запечатанный тип и несут разные данные
через final class, по аналогии с абстрактным родителем
и конкретными наследниками. Дальше разберем поля и методы
у enum, список values, затем sealed class
и разбор вариантов в switch.