Класс Variant

О Godot Engine

Вариант — важнейший тип данных в Godot. Он занимает всего 24 байта на 64-битных платформах (20 байт на 32-битных) и может хранить практически любой тип данных движка. Варианты редко используются для длительного хранения информации, а в основном используются для связи, редактирования, сериализации и перемещения данных в целом.

Variant может:

  • Храните практически любые типы данных.

  • Выполнять операции между различными variants (GDScript использует Variant как атомарный/нативный тип данных).

  • Быть хешированным, чтобы его можно было быстро сравнить с другими вариантами.

  • Использовать для безопасного преобразования типов данных.

  • Используется для абстрагирования вызывающих методов и их аргументов (Godot экспортирует все свои функции через варианты).

  • Использоваться для отложенных вызовов или передвижения данных между потоками.

  • Быть сереализован как бинарный файл и сохранён на диск, или передан через сеть.

  • Быть сериализован в текст и использоваться для печати значений и редактируемых настроек.

  • Работать как экспортируемое свойство, чтобы редактор мог редактировать его везде.

  • Использоваться для словарей, массивов, парсеров, итд.

По сути, благодаря классу Variant, разработка самого Godot была более простой задачей, так как он позволил с небольшими усилиями создавать сложные динамические конструкции, не типичные для C++. Подружитесь с Variant уже сегодня.

Примечание

Все типы в Variant, за исключением Nil и Object, не могут быть null и всегда должны хранить допустимое значение. Поэтому эти типы в Variant называются необнуляемыми типами.

Один из типов Variant — Nil, который может хранить только значение null. Следовательно, Variant может содержать значение null, хотя все типы Variant, за исключением Nil и Object, не допускают значения "null".

Ссылки

Список типов вариантов

Эти типы доступны в Variant:

Тип

Примечания

Nil (можно хранить только null)

Тип, допускающий значение NULL

bool

int

float

String

Vector2

Vector2i

Rect2

2D-аналог AABB

Rect2i

Vector3

Vector3i

Transform2D

Vector4

Vector4i

Plane

Quaternion

AABB

3D-аналог Rect2

Basis

Transform3D

Projection

Color

StringName

NodePath

RID

Object

Тип, допускающий значение NULL

Callable

Signal

Dictionary

Array

PackedByteArray

PackedInt32Array

PackedInt64Array

PackedFloat32Array

PackedFloat64Array

PackedStringArray

PackedVector2Array

PackedVector3Array

PackedColorArray

PackedVector4Array

Контейнеры: Array (массив) и Dictionary (словарь)

Оба класса Array и Dictionary реализованы с использованием вариантов. Словарь может сопоставить любой тип данных, используемый в качестве ключа, с любым другим типом данных. Массив просто содержит массив вариантов. Конечно, вариант также может содержать словарь или массив внутри, что делает его ещё более гибким.

Modifications to a container will modify all references to it. A Mutex should be created to lock it if multi-threaded access is desired.

Ссылки