Ответ
Null safety — это набор функций языка Dart, который делает типы не nullable по умолчанию. Это означает, что переменная не может содержать null, если вы явно не разрешите это. Цель — устранить ошибки времени выполнения, связанные с разыменованием null (Null Pointer Exceptions), на этапе компиляции.
Ключевые концепции:
- Non-nullable по умолчанию:
String name = 'Alex';—nameникогда не может бытьnull. - Nullable типы: Чтобы разрешить
null, используется?.String? nickname;—nicknameможет быть строкой илиnull. - Обязательная инициализация: Non-nullable переменные должны быть инициализированы до использования.
Операторы для работы с nullable-переменными:
?.(Опциональный доступ): Вызывает метод или получает свойство только если объект неnull.String? maybeText; int? length = maybeText?.length; // length будет null, если maybeText null??(Оператор если-null): Предоставляет значение по умолчанию.String displayName = nickname ?? 'Гость';!(Оператор утверждения не-null): Говорит компилятору: "Я уверен, что это значение неnullсейчас". Использовать с осторожностью, так как при ошибке вызовет исключение во время выполнения.String definitelyText = maybeText!; // Runtime error, если maybeText nulllate: Откладывает инициализацию non-nullable переменной. Вы обещаете присвоить значение до первого использования.late String apiKey; void init() { apiKey = fetchKeyFromConfig(); // Инициализируем позже }
Практический эффект: Код становится более предсказуемым, а анализ потока данных (flow analysis) компилятора помогает "видеть", когда nullable-переменная в определенной точке кода гарантированно не является null, позволяя использовать ее без лишних проверок.