Класс Variant

О движке

Variant это самый важный тип данных в Godot, он самый важный класс в движке. Variant занимает 20 байт и может содержать практический любой тип данных внутри себя. Variant’ы редко используются для хранения информации на долгий срок, вместо этого они используются для коммуникации, редактирования, сериализации и передвижения данных.

Variant может:

  • Хранить почти любой тип данных
  • Выполнять операции между различными variants (GDScript использует Variant как атомарный/нативный тип данных).
  • Быть хэшированным, так что можно он может быть легко сравнимым с другими variants
  • Использоваться для безопасной конвертации между типами данных
  • Использоваться для абстракции вызываемых методов и их аргументов (Godot экспортирует все эти функции через variants)
  • Использоваться для отложенных вызовов или передвижения данных между потоками.
  • Быть сереализован как бинарный файл и сохранён на диск, или передан через сеть.
  • Быть сериализован в текст и использоваться для печати значений и редактируемых настроек.
  • Работать как экспортируемое свойство, чтобы редактор мог редактировать его везде.
  • Использоваться для словарей, массивов, парсеров, итд.

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

Источники:

Контейнеры: Dictionary и Array

Both are implemented using variants. A Dictionary can match any datatype used as key to any other datatype. An Array just holds an array of Variants. Of course, a Variant can also hold a Dictionary and an Array inside, making it even more flexible.

Изменения контейнера будут модифицировать все ссылки на него. Mutex должен быть создан для его закрытия если требуется мульти-поточный доступ.

Поддержка Копии-на-запись (COW) для контейнеров была удалена в Godot 3.0.

Источники: