← Назад к вопросам

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

1.0 Junior🔥 81 комментариев
#Базы данных и SQL#Теория тестирования

Комментарии (1)

🐱
claude-haiku-4.5PrepBro AI26 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Разница между Null и 0

Определение

Null (None в Python) — отсутствие значения, неопределенное состояние

0 — числовое значение ноль

Фундаментальные различия

1. Семантика

Null/None:

  • Отсутствие данных
  • Переменная не инициализирована
  • Результат несуществующей операции
  • "Я не знаю", "нет значения"

0:

  • Действительное число
  • Нейтральный элемент сложения
  • Действительное значение
  • "Ноль", "пусто, но определено"

2. Примеры

Python:

# None — отсутствие значения
value = None
result = None

# 0 — число
count = 0
balance = 0
temperature = 0

if value is None:  # Проверка на None
    print("No value")

if count == 0:  # Проверка на ноль
    print("No items")

JavaScript:

// null — отсутствие значения
let value = null;

// undefined — переменная объявлена, но не инициализирована
let x;

// 0 — число ноль
let count = 0;

if (value === null) {  // Проверка на null
    console.log("No value");
}

SQL:

-- NULL в SQL — отсутствие значения
SELECT * FROM users WHERE age IS NULL;

-- 0 — число
SELECT * FROM users WHERE balance = 0;

-- Нельзя сравнивать NULL = 0
-- NULL = 0 возвращает NULL, не TRUE

3. Проверка

Python:

value = 0
print(value is None)  # False
print(value == 0)     # True
print(bool(value))    # False (оба ноль и None falsy)

result = None
print(result is None)  # True
print(result == 0)     # False
print(bool(result))    # False

4. Операции

Python:

# С None — ошибка
try:
    x = None + 5  # TypeError
except TypeError:
    print("Cannot add None and int")

# С нулем — работает
x = 0 + 5  # 5

SQL:

-- NULL в операциях часто дает NULL
SELECT NULL + 5;  -- NULL
SELECT 0 + 5;     -- 5
SELECT 0 * 5;     -- 0
SELECT NULL * 5;  -- NULL

5. В JSON

JSON:

{
  "value": null,
  "count": 0,
  "name": "",
  "active": false
}

Все это разные значения:

  • null — отсутствие
  • 0 — число
  • "" — пустая строка
  • false — логическое ложь

Практические примеры в тестировании

import pytest

def test_null_vs_zero():
    # Проверка на None
    result = function_that_returns_none()
    assert result is None
    
    # Проверка на ноль
    count = function_that_returns_zero()
    assert count == 0
    assert count is not None  # Это явно ноль, не None

def test_api_response():
    response = {
        "user_id": None,      # Пользователь не найден
        "balance": 0,          # Баланс равен нулю
        "items_count": 0,      # Нет предметов
        "last_purchase": None  # Никогда ничего не покупал
    }
    
    assert response["user_id"] is None
    assert response["balance"] == 0
    assert response["items_count"] == 0

def test_database_values():
    # В БД может быть NULL или 0
    user_data = {
        "age": None,      # Возраст неизвестен
        "purchases": 0,   # Ноль покупок
        "balance": None,  # Баланс неизвестен
    }
    
    assert user_data["age"] is None
    assert user_data["purchases"] == 0

def test_json_parsing():
    json_data = '{"value": null, "count": 0}'
    data = json.loads(json_data)
    
    assert data["value"] is None
    assert data["count"] == 0

Правила использования

Используйте None/Null для:

  • Отсутствия данных
  • Ошибок при поиске
  • Необязательных параметров
  • Незаполненных полей

Используйте 0 для:

  • Нулевого значения
  • Отсутствия количества (0 элементов)
  • Нейтрального значения
  • Нормального результата операции

Важное замечание в тестировании

# НЕПРАВИЛЬНО — смешивание None и 0
result = get_user_count()
if result:  # Будет False и для None, и для 0
    process(result)

# ПРАВИЛЬНО — явная проверка
result = get_user_count()
if result is not None and result > 0:
    process(result)

# Или еще яснее
if isinstance(result, int) and result > 0:
    process(result)

Для QA тестирования очень важно различать None (отсутствие значения) и 0 (нулевое значение).

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