В чем разница между Null и 0?

«В чем разница между Null и 0?» — вопрос из категории Основы тестирования, который задают на 28% собеседований AQA / Automation. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

С точки зрения тестирования и обработки данных, Null (или None, nil в зависимости от языка) и 0 — это принципиально разные сущности, и их путаница часто приводит к дефектам.

  • 0 (ноль) — это конкретное, определенное значение. Оно числовое и имеет смысл в вычислениях (например, количество элементов, счетчик, результат операции).
  • Null — это отсутствие какого-либо значения. Это специальный маркер, указывающий на то, что данные неизвестны, неприменимы или просто не были предоставлены.

Практическое значение для тестирования:

  1. Пограничные значения и валидация:

    • Поле "Возраст" со значением 0 может быть корректным (новорожденный).
    • Поле "Возраст" со значением Null означает, что возраст не указан. Система должна корректно обрабатывать оба случая, что является объектом тестирования.
  2. Ошибки в логике приложения:

    // Пример потенциального бага
    let itemsInCart = null; // Корзина не инициализирована
    let totalPrice = itemsInCart * 10; // Результат: NaN (Not a Number) или ошибка
    // В то время как:
    let itemsInCart = 0; // Корзина пуста
    let totalPrice = itemsInCart * 10; // Результат: 0
  3. Работа с базами данных:

    • В столбце discount значение 0 означает "скидка 0%" (актуальная информация).
    • Значение NULL в том же столбце может означать "скидка не применяется" или "значение не задано". Запросы с условиями WHERE discount = 0 и WHERE discount IS NULL вернут разные наборы данных.
  4. Тест-кейсы: Хорошая практика — создавать отдельные тесты для проверки обработки Null-значений (проверка на null-безопасность) и для проверки корректной обработки нулевых значений (0, пустая строка "", пустой массив []).