> Что такое null safety в Dart (Flutter)
Уровень: junior · Роль: frontend · Категория: Технические вопросы
Компании: Верме
Стек: Flutter
> Пример ответа
Короткий ответ
Null safety - это система типов в Dart, которая позволяет компилятору определять, может ли переменная содержать null. Она делает null-ошибки видимыми на этапе компиляции, а не в рантайме. В Dart все типы по умолчанию non-nullable, а для явного разрешения null используется оператор ?. Это ключевая фича языка, которая значительно повышает надёжность кода и упрощает его поддержку.
Подробное объяснение
Null safety в Dart появился в версии 2.12 и стал обязательным с Dart 3. Основная идея - разделить типы на nullable и non-nullable. Переменная типа String не может содержать null, а String? - может. Это проверяется статически, то есть на этапе компиляции.
Компилятор использует flow analysis: он отслеживает, где переменная могла быть присвоена null, и требует явной проверки перед использованием. Например, если у вас есть String? name, вы не можете просто вызвать name.length - нужно сначала проверить if (name != null) или использовать оператор !.
Ключевые операторы:
?- объявление nullable типа!- assertion, говорит компилятору "я уверен, что здесь не null"??- оператор, возвращающий значение справа, если слева null?.- безопасный доступ к члену, возвращает null, если объект null
Также есть late-переменные (late String name), которые инициализируются позже, но до первого использования.
На практике
В Flutter null safety особенно важен, потому что виджеты и конфигурации часто содержат опциональные параметры. Например, Text может принимать style, который может быть null. С null safety вы явно видите, какие параметры обязательны, а какие нет.
При работе с API и JSON-данными null safety помогает обрабатывать отсутствующие поля. Вместо того чтобы ловить NullPointerException в рантайме, вы получаете ошибку компиляции или явно обрабатываете null через ?? или ?..
Также важно помнить, что null safety влияет на коллекции: List<String> не может содержать null, а List<String?> - может.
Пример кода
void main() { // Non-nullable переменная String name = 'Alice'; // name = null; // Ошибка компиляции // Nullable переменная String? nickname; print(nickname?.length); // null, безопасно // Проверка перед использованием if (nickname != null) { print(nickname.length); // компилятор знает, что не null } // Оператор ?? с значением по умолчанию String displayName = nickname ?? 'Guest'; print(displayName); // Assertion, если уверены String? maybeName = 'Bob'; print(maybeName!.length); // late переменная late String lazyValue; lazyValue = 'initialized later'; print(lazyValue); }
Как отвечать на собеседовании
Начните с определения: null safety - это механизм, который делает null-ошибки ошибками компиляции. Затем объясните, как это работает: типы по умолчанию non-nullable, nullable обозначаются ?. Упомяните flow analysis и основные операторы. Приведите пример из практики - например, обработку данных из API. Если спросят про trade-off, скажите, что код становится более явным, но требует больше проверок на границах системы (например, при парсинге JSON).
Что проверяет интервьюер
Интервьюер проверяет:
- понимание базовой концепции и синтаксиса
- умение объяснить, как компилятор помогает предотвращать ошибки
- знание операторов
?,!,??,?. - понимание разницы между nullable и non-nullable типами
- способность применить знания в реальном коде Flutter
Типичные ошибки
- Путаница между
!и??- это разные вещи:!это assertion,??это fallback - Использование
!без уверенности, что значение не null - это может привести к runtime error - Забывание, что
lateпеременная тоже может быть неинициализированной при обращении - Непонимание, что
List<String>иList<String?>- разные типы - Попытка использовать null safety в старых проектах без миграции - это не работает
> Похожие задачи по frontend
Как работает система рендеринга во Flutter
Есть ли в Dart специальный тип Stream
Какие основные особенности языка Dart
В чем разница анимаций Lottie и Rive во Flutter
> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?
Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью