Классы sealed и исчерпывающий switch
Замыкайте иерархию, которую может проверить компилятор
«Классы sealed и исчерпывающий switch» — бесплатный урок Dart Academy на CoddyKit. Это урок 2 из 4. Ты можешь прочитать весь урок бесплатно ниже — а потом практиковать его прямо в браузере с встроенным редактором кода и ИИ-репетитором 24/7. Это часть пути обучения Dart Academy, и твой прогресс синхронизируется между веб-версией и приложением CoddyKit. Курс Dart Academy содержит 4 уроков всего.
Замкнутое семейство
Запечатанный класс определяет фиксированный набор подтипов. Код за пределами его файла не может добавить новый подтип, поэтому всё семейство известно заранее.
sealed class Shape {}Объявление подтипов
Подклассы запечатанного типа находятся в том же файле. Вместе они образуют все возможные варианты, которые должен учитывать компилятор.
class Circle extends Shape {}
class Square extends Shape {}Нельзя создать напрямую
Запечатанный класс неявно является абстрактным, поэтому создать его напрямую нельзя. Вы создаёте только один из известных подтипов.
var s = Shape(); // error
var s = Circle(); // okПреимущества sealed
Поскольку подтипы образуют полный набор, Dart знает весь список. Поэтому switch может проверить, обработали ли Вы каждый случай.
Переключение между подтипами
С помощью switch для запечатанного значения можно сопоставить каждый подтип по шаблону. В каждой ветви доступен точный тип, которому соответствует шаблон.
switch (shape) {
case Circle(): print('round');
case Square(): print('boxy');
}Проверка полноты
Если Вы забудете подтип, компилятор сообщит об ошибке. Случай не может незаметно потеряться в switch для запечатанного типа.
Ветка default не нужна
Поскольку обработаны все случаи, ветка default не нужна. Её добавление лишь скрыло бы будущие необработанные случаи.
switch как выражение
Используйте switch как выражение, чтобы напрямую вычислить значение. Проверка полноты сохраняется, поэтому каждая ветвь должна что-то возвращать.
final name = switch (shape) {
Circle() => 'circle',
Square() => 'square',
};Добавление нового варианта
Добавьте новый подтип позже — и каждый switch, где он не обработан, будет отмечен красным. Компилятор подскажет Вам обновить каждый такой участок.
class Triangle extends Shape {}
// existing switches now errorsealed и abstract
Абстрактный класс допускает неизвестные внешние подтипы, поэтому switch не может быть полным. Запечатанный класс ограничивает набор и позволяет выполнить полную проверку.
Отличный выбор для состояний
Запечатанные типы особенно полезны для моделирования состояний приложения, таких как Loading, Success и Error. Тогда для каждой ветви интерфейса гарантированно существует соответствующий вариант. ✅
sealed class Result {}
class Loading extends Result {}
class Done extends Result {}Быстрая проверка
Быстрая проверка полноты запечатанного типа.
Итоги
Вы увидели, что sealed-классы замыкают семейство типов и делают каждый switch полным, поэтому пропущенные случаи становятся ошибками компиляции. 🎯
Часто задаваемые вопросы
Урок «Классы sealed и исчерпывающий switch» бесплатный?
Да — полный текст урока «Классы sealed и исчерпывающий switch» бесплатно доступен здесь в веб-версии. Чтобы практиковать его интерактивно (встроенный редактор кода и ИИ-репетитор 24/7) и разблокировать остальной курс Dart Academy, подпишись на CoddyKit PRO. Курс Dart Academy содержит 4 уроков всего.
Чему я научусь в уроке «Классы sealed и исчерпывающий switch»?
Замыкайте иерархию, которую может проверить компилятор Ты практикуешь Dart Academy с помощью реального кода, который запускаешь прямо в браузере, и ИИ-репетитор 24/7 отвечает на твои вопросы во время урока.
Нужен ли мне опыт, чтобы начать Dart Academy?
Предыдущий опыт не требуется. Dart Academy на CoddyKit структурирован для всех уровней — от новичков до продвинутых, поэтому ты можешь начать отсюда или с самого начала и учиться в своем темпе. Это урок 2 из 4.
Сколько времени занимает урок «Классы sealed и исчерпывающий switch»?
Большинство уроков CoddyKit занимают около 5–10 минут. Каждый из них компактный и интерактивный, поэтому ты постоянно делаешь прогресс и продолжаешь с того же места в веб-версии и приложении.
Можно ли писать и запускать код в этом уроке Dart Academy?
Да. Каждый урок Dart Academy включает встроенный редактор кода, поэтому ты пишешь и запускаешь реальный код прямо в браузере и получаешь моментальную обратную связь от AI — локальная установка не требуется.
Все уроки этого курса
- Поля final и глубокая неизменяемость
- Классы sealed и исчерпывающий switch
- Модификаторы base, interface и final
- copyWith и равенство по значению