Является ли null объектом в Dart?

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

Ответ

Нет, null в Dart не является объектом (экземпляром какого-либо класса, например, Object). Это специальное ключевое слово, обозначающее полное отсутствие значения.

Доказательства и особенности:

void main() {
  String? nullableString = null;
  String nonNullableString = 'text';

  // 1. Проверка типа
  print(nullableString is Object); // false
  print(nonNullableString is Object); // true

  // 2. null имеет собственный тип Null
  print(nullableString is Null); // true (если переменная содержит null)
  print(null is Null); // true

  // 3. Попытка вызова метода или доступа к свойству приведёт к ошибке во время выполнения.
  // print(nullableString.length); // Runtime error: NoSuchMethodError

  // 4. Безопасный доступ с операторами null-aware
  print(nullableString?.length); // null (без ошибки)
  print(nullableString ?? 'default'); // 'default'
}

Важность в контексте Sound Null Safety: С введением null safety система типов Dart чётко разделяет nullable и non-nullable типы. Это позволяет предотвратить ошибки разыменования null на этапе компиляции.

  • String — никогда не может быть null.
  • String? — может содержать либо String, либо null.

Таким образом, null — это отдельное, примитивное значение в системе типов Dart, а не объект.