Ответ вслух Middle Dart: типы и null-safety обновлено

Records и patterns в Dart 3

Вопрос

Что появилось в Dart 3 из records и patterns и как это применить в Flutter-проекте?

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

Ответьте вслух за 2 минуты, как на собесе. Потом сверьтесь с тезисами: что прозвучало, а что нет.

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

Коротко

Образцовый ответ: «Records это лёгкие неизменяемые значения вроде кортежей: (int, String) или с именами ({int x, int y}). Они сравниваются по значению и удобны, когда функция возвращает два-три результата, например (User, Token).

Что должно прозвучать в ответе

  • Records: анонимные неизменяемые кортежи с позиционными и именованными полями, равенство по значению

  • Возврат нескольких значений из функции без отдельного класса

  • Patterns: деструктуризация `var (a, b) = ...`, разбор списков, мап, объектов в `switch` и `if-case`

  • Switch-выражения и guard `when`

  • Исчерпывающий `switch` по `sealed`-классам для состояний экрана

Что могут спросить следом

  • Когда лучше завести класс, а не record?
  • Как разобрать JSON через if-case?

Разбор

Образцовый ответ: «Records это лёгкие неизменяемые значения вроде кортежей: (int, String) или с именами ({int x, int y}). Они сравниваются по значению и удобны, когда функция возвращает два-три результата, например (User, Token). Если структура живёт долго и у неё есть смысл в домене, я всё же завожу класс. Patterns позволяют разбирать значения: var (user, token) = await login();, разбирать списки и мапы. Например, валидация JSON: if (json case {'id': int id, 'name': String name}) {...} одновременно проверяет типы и достаёт поля. Switch стал выражением с guard через when. Самое полезное во Flutter: состояние экрана как sealed-класс Loading, Data, Error, и switch по нему в build. Компилятор следит, чтобы каждое состояние было обработано»

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

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