Какие основные особенности языка Dart
Что проверяют
Понимаете ли вы, чем Dart отличается от привычных фронтендеру JavaScript и TypeScript и почему на нём построен Flutter. Следом обычно спрашивают про асинхронность: как Dart выполняет тяжёлую работу, не замораживая интерфейс.
Как отвечать
Назовите особенности, которые реально влияют на код:
- статическая типизация: система типов надёжная (sound), тип выводится через
varиfinal, аdynamicоставлен как явный выход из проверки. В отличие от TypeScript, дженерики сохраняются в рантайме, а не стираются; - null safety: с Dart 3 обязательна,
StringиString?это разные типы, и компилятор не даст обратиться к nullable без проверки; - асинхронность:
FutureиStream,async/await,async*сyieldдля потоков. Код идёт в одном потоке с циклом событий, как в браузере; - изоляты: параллелизм без общей памяти, общение сообщениями. Тяжёлый расчёт уносят в
Isolate.runилиcomputeво Flutter; - компиляция: JIT в разработке даёт hot reload, AOT в машинный код для релиза, для веба есть компиляция в JavaScript и WebAssembly;
- Dart 3: records, pattern matching,
sealed-классы с исчерпывающимswitch, модификаторы классов; - прочее: mixins, extension-методы, именованные параметры с
required, приватность через подчёркивание в имени вместо ключевого слова.
Для фронтенд-позиции полезно сравнить с TypeScript: синтаксис и async/await похожи, но рантайм другой, типы проверяются по-настоящему, а Flutter Web рисует интерфейс своим движком на canvas, а не собирает DOM.
Где спотыкаются
Говорят, что Dart поддерживает «и статическую, и динамическую типизацию» как равноправные режимы. Язык статически типизирован, dynamic это исключение, и путать его с var нельзя: var фиксирует выведенный тип.
Считают, что async запускает код в другом потоке. Долгий синхронный цикл внутри async-функции всё равно заблокирует интерфейс, для этого нужны изоляты.
Обходят null safety оператором ! везде подряд. Каждый такой ! это возможное исключение в рантайме, и интервьюер ждёт, что вы знаете ?., ?? и продвижение типа после проверки на null.