Выбор ответа Senior Dart: типы и null-safety обновлено
Dart: исчерпывающий switch
Вопрос
Чем выражение switch в Dart 3 полезно при работе с sealed-иерархией?
Попробуйте сами
Выберите вариант, и откроется разбор.
Показать ответ и разбор
Коротко
Правильный ответ: Компилятор требует обработать все подтипы и укажет на забытый новый подкласс. Для sealed-класса все прямые подтипы объявлены в той же библиотеке, поэтому компилятор знает полный список и требует исчерпывающий switch.
Варианты ответа
- Он работает быстрее цепочки
if, но полноту обработки подтипов компилятор не проверяет - Полнота проверяется только в debug-режиме ассертом, а в release забытый случай пропустится
- Он позволяет обработать подтипы из любых библиотек, даже те, что не объявлены заранее
- Компилятор требует обработать все подтипы и укажет на забытый новый подклассправильный ответ
Разбор
Для sealed-класса все прямые подтипы объявлены в той же библиотеке, поэтому компилятор знает полный список и требует исчерпывающий switch. Добавили новое состояние, и сборка покажет все места, где его не обработали. Это проверка статическая, не ассерт. Подтипы вне библиотеки у sealed запрещены именно ради этой гарантии.
Ответьте сами, а не прочитайте
В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.