Что такое null safety · Flutter Developer — JobPilot

Что такое null safety

Flutter Developer · 40%
Вопрос 447 / #
Пример ответа

Коротко: Null safety — это система типов в Dart, которая предотвращает ошибки, связанные с null-значениями, делая типы не-nullable по умолчанию и требуя явного указания nullable-типов через ?. В моём опыте разработки на Flutter это значительно повысило надёжность приложений, сократив runtime-ошибки.

Ключевые идеи:
  • Типы по умолчанию не допускают null, что устраняет ошибки 'null reference' на этапе компиляции
  • Для nullable-переменных используется ? (например, String?), и доступ к ним требует проверки или операторов вроде ??, ?., или !
  • Система включает flow analysis, который автоматически продвигает типы после проверок, упрощая код
Пример: Например, при объявлении String name = 'John' нельзя присвоить null, а для String? nullableName = null требуется обработка, как в print(nullableName?.length ?? 0), чтобы избежать сбоев.
Пример использования null safety в Dart с nullable и non-nullable типами
dart
void main() {
  // Non-nullable тип — ошибка компиляции при присвоении null
  String nonNullable = 'Hello';
  // nonNullable = null; // Ошибка: A value of type 'Null' can't be assigned

  // Nullable тип с ?
  String? nullable = null;
  nullable = 'World';

  // Обработка nullable значений
  print(nullable?.length); // Используем ?. для безопасного доступа
  print(nullable ?? 'Default'); // Используем ?? для значения по умолчанию

  // Flow analysis: после проверки тип продвигается
  if (nullable != null) {
    print(nullable.length); // Без ?., так как nullable теперь non-nullable в этом блоке
  }

  // Явное утверждение с ! (осторожно, может вызвать ошибку, если null)
  String forced = nullable!; // Утверждаем, что nullable не null
  print(forced);
}
Вопросы для интервьюера:
  • Как вы мигрировали старый код на null safety?Я использовал dart migrate для автоматического анализа и конвертации, затем вручную проверял спорные места, особенно с внешними пакетами, и добавлял аннотации @required или required для параметров.
  • Какие операторы null safety вы чаще всего применяете в Flutter-виджетах?В виджетах я часто использую ?. для безопасного доступа к свойствам (например, text?.length), ?? для значений по умолчанию (как в Text(data ?? 'Loading')), и late для отложенной инициализации, когда уверен в значении до использования.
Практический совет (на неделю):
  1. Начните с включения null safety в новом проекте Flutter через Dart 2.12+ и используйте dart analyze для проверки кода
  2. При работе с nullable данными из API, всегда обрабатывайте возможные null с помощью ?? или проверок, чтобы избежать сбоев в UI
Flutter Developer
Общий
40%
Навигация
Есть ли военный билет
Следующий: Что такое dynamic
Предыдущий: Есть ли военный билет

Мы используем cookie для улучшения сайта. Продолжая пользоваться сайтом, вы соглашаетесь с политикой cookie и политикой конфиденциальности.