Null безопасность (Null safety)
dartNon-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
как Nullable — Object?
, можно считать что теперь по типу он Object
или null
, а значит может принимать любой объект, включая null
.
Все Non-nullable объекты наследуются от Object
.
Все Nullable объекты наследуются от Object?
.
Терминология null safety
vs non-nullable
/nullable
null safety
— концепция языка, non-nullable
/nullable
— конкретное свойство для переменных и типов реализующих концепцию.