Null безопасность (Null safety)

dart

Non-nullable и Nullable

Начиная с версии Dart 2.12 все переменные создаются как необнуляемые (Non-nullable). Они не могут принимать null.

  // Non-nullable переменная
  int foo;
  // ❌ Ошибка: Необнуляемая локальная переменная 'foo' должна быть назначена перед ее использованием
  print(foo); // Ошибка

  // ❌ Ошибка: Значение типа 'Null' не может быть присвоено переменной типа 'int'
  foo = null; // Ошибка

Переменные которые инициализируются с null и которым может быть присвоен null, объявляются явно подставлением символа ? (Nullable).

  // Nullable переменная
  int? bar;
  print(bar); // null
  bar = null;

Null safety и типы

Object базовый класс для всех объектов Dart, кроме null.

Если отметить Object как NullableObject?, можно считать что теперь по типу он Object или null, а значит может принимать любой объект, включая null.

Все Non-nullable объекты наследуются от Object.
Все Nullable объекты наследуются от Object?.

Терминология null safety vs non-nullable/nullable

null safety — концепция языка, non-nullable/nullable — конкретное свойство для переменных и типов реализующих концепцию.