> Что такое 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 в старых проектах без миграции - это не работает

> ГОТОВЫ К СЛЕДУЮЩЕМУ СОБЕСЕДОВАНИЮ?

Запустите тренировочную сессию с ИИ и получите детальную обратную связь, чтобы увереннее проходить реальные интервью