Выбор ответа Senior Dart: типы и null-safety обновлено

Dart: исчерпывающий switch

Вопрос

Чем выражение switch в Dart 3 полезно при работе с sealed-иерархией?

Попробуйте сами

Выберите вариант, и откроется разбор.

Показать ответ и разбор

Коротко

Правильный ответ: Компилятор требует обработать все подтипы и укажет на забытый новый подкласс. Для sealed-класса все прямые подтипы объявлены в той же библиотеке, поэтому компилятор знает полный список и требует исчерпывающий switch.

Варианты ответа

  1. Он работает быстрее цепочки if, но полноту обработки подтипов компилятор не проверяет
  2. Полнота проверяется только в debug-режиме ассертом, а в release забытый случай пропустится
  3. Он позволяет обработать подтипы из любых библиотек, даже те, что не объявлены заранее
  4. Компилятор требует обработать все подтипы и укажет на забытый новый подклассправильный ответ

Разбор

Для sealed-класса все прямые подтипы объявлены в той же библиотеке, поэтому компилятор знает полный список и требует исчерпывающий switch. Добавили новое состояние, и сборка покажет все места, где его не обработали. Это проверка статическая, не ассерт. Подтипы вне библиотеки у sealed запрещены именно ради этой гарантии.

Ответьте сами, а не прочитайте

В тренажёре вопрос попадёт в повторения и вернётся, когда начнёт забываться. Плюс билеты с зачётом: 20 вопросов, не больше 2 ошибок.