Nullable-типы

b

Что такое nullable-типы и зачем они нужны в Delphi?

Nullable-типы (типы, допускающие неопределённое значение) решают классическую проблему: как отличить «ноль» от «значения нет». В Delphi 2026 года разработчику доступно несколько путей реализации этой концепции. Каждый вариант имеет особенности, влияющие на производительность, читаемость кода и совместимость с базами данных.

Сравнение подходов: три основных варианта

1. Встроенные nullable-типы (System.Nullable)

Стандартный механизм, появившийся в современных версиях Delphi (начиная с 10.x). Позволяет объявить переменную, которая может быть либо значением базового типа, либо пустой ссылкой (nil).

2. Записи с флагом IsNull (самодельный подход)

Классический метод, распространённый в проектах, где важна совместимость со старыми версиями Delphi (до XE). Создаётся запись, содержащая поле для значения и булевый флаг, указывающий, задано ли значение.

3. Использование Variant и Null

Старый способ, при котором переменная типа Variant может принимать специальное значение Null. Иногда встречается в коде, работающем с базами данных (BDE, ADO).

Таблица сравнения характеристик

КритерийSystem.NullableЗапись с флагом IsNullVariant + Null
Строгая типизацияДаДа (на уровне записи)Нет
ПроизводительностьСредняя (упаковка)ВысокаяНизкая
Совместимость с БДХорошая (через преобразование)Требуется адаптерПрямая
Читаемость кодаВысокаяСредняя (требуются проверки)Низкая (неявные преобразования)
Минимальная версия Delphi10 Seattle (2015)ЛюбаяВсе версии
Риск ошибокНизкийСредний (ручные проверки)Высокий

Кому какой вариант подходит?

Рекомендации при выборе

  1. Если проект начинается с нуля на Delphi 10.3 или новее — используйте Nullable.
  2. Если код должен работать на Delphi 7–XE — выбирайте запись с флагом IsNull.
  3. Избегайте Variant для nullable-логики везде, кроме случаев, когда уже используется смешанная типизация в легаси.
  4. Для работы с базами данных используйте специализированные поля (TField.IsNull) и не смешивайте их с nullable-типами языка.

В 2026 году стандартные nullable-типы становятся де-факто стандартом, но знание альтернатив помогает эффективно решать задачи на разных этапах жизненного цикла приложения.

Добавлено: 27.04.2026