Что такое Null в Dart?

«Что такое Null в Dart?» — вопрос из категории Dart Core, который задают на 29% собеседований Flutter Разработчик. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

Null в Dart представляет собой отсутствие значения. С введением null safety (начиная с Dart 2.12 и Flutter 2.0) система типов стала строже, чтобы предотвратить ошибки времени выполнения из-за разыменования null.

Основные концепции:

  1. Non-nullable типы (по умолчанию): Переменная не может содержать null.
    String name = 'Alice'; // OK
    String name = null; // Ошибка компиляции
  2. Nullable типы (с ?): Явно указываем, что переменная может быть null.
    String? nickname; // Начальное значение null
    nickname = 'Bob'; // OK
    nickname = null; // OK
  3. Безопасный доступ и операторы:
    • ?. (Опциональный доступ): Выполняет операцию, только если объект не null.
      int? length = nickname?.length; // length будет null, если nickname null
    • ?? (Оператор если-null): Предоставляет значение по умолчанию.
      String displayName = nickname ?? 'Гость'; // Если nickname null, используем 'Гость'
    • ! (Оператор утверждения non-null): Говорим компилятору: "Я уверен, что здесь не null". Использовать с осторожностью.
      String definitelyNotNull = nickname!; // Runtime-ошибка, если nickname null
  4. Обязательные параметры (required): Гарантирует, что аргумент будет передан.
    void greet({required String name}) { ... }
    greet(name: 'Alice'); // OK
    greet(); // Ошибка компиляции

    Null safety делает код более предсказуемым и уменьшает количество runtime-исключений.