Attention: Here be dragons

This is the latest (unstable) version of this documentation, which may document features not available in or compatible with released stable versions of Godot.

Classe de variante

Sobre

Variant é o tipo de dado mais importante no Godot. Um Variant ocupa apenas 24 bytes em plataformas de 64 bits (20 bytes em plataformas de 32 bits) e pode armazenar quase qualquer tipo de dado do motor dentro dele. Variants são raramente usados para manter informações por longos períodos de tempo; em vez disso, são usados principalmente para comunicação, edição, serialização e, geralmente, para mover dados.

Uma Variant pode:

  • Armazenar quase qualquer tipo de dado.

  • Executar operações entre muitas Variant (o GDScript usa Variant como seu tipo de dado atômico/nativo).

  • Passar por um hash, para que possa ser comparado rapidamente com outros variants.

  • Ser usado para converter com segurança entre tipos de dados.

  • Ser usado para abstrair chamadas de métodos e seus argumentos (o Godot expõe todas as suas funções por meio de variants).

  • Ser usado para adiar chamadas ou mover dados entre threads.

  • Ser serializado como binário e armazenado em disco ou ser transferido pela rede.

  • Ser serializado em texto e usado para imprimir valores e configurações editáveis.

  • Trabalhar como uma propriedade exportada, para que o editor possa editá-la universalmente.

  • Ser usada para dicionários, matrizes, analisadores (parsers), etc.

Basicamente, graças à classe Variant, escrever a Godot foi uma tarefa muito, mas muito mais fácil, pois esta permite construções altamente dinâmicas não comuns em C++ com menos esforço. Torne-se um amigo da Variant hoje.

Nota

Todos os tipos dentro do Variant, exceto Nil e Object, não podem ser null e devem sempre armazenar um valor válido. Esses tipos dentro do Variant são, portanto, chamados de tipos não-anuláveis (non-nullable).

One of the Variant types is Nil which can only store the value null. Portanto, é possível que um Variant contenha o valor null, embora todos os tipos Variant, excluindo Nil e Object, sejam não-anuláveis.

Referências

Lista de tipos Variant

Esses tipos estão disponíveis em Variant:

Tipo

Notas

Nil (pode armazenar apenas null)

Tipo anulável

bool

int

float

String

Vector2

Vector2i

Rect2

Contraparte 2D do AABB

Rect2i

Vector3

Vector3i

Transform2D

Vector4

Vector4i

Plane

Quaternion

AABB

Contraparte 3D do Rect2

Basis

Transform3D

Projection

Color

StringName

NodePath

RID

Object

Tipo anulável

Callable

Signal

Dictionary

Array

PackedByteArray

PackedInt32Array

PackedInt64Array

PackedFloat32Array

PackedFloat64Array

PackedStringArray

PackedVector2Array

PackedVector3Array

PackedColorArray

PackedVector4Array

Contêineres: Array e Dictionary

Tanto Array quanto Dictionary são implementados usando variants. Um Dictionary pode corresponder a qualquer tipo de dado usado como chave para qualquer outro tipo de dado. Um Array apenas contém uma matriz de Variants. Claro, um Variant também pode conter um Dictionary ou um Array dentro dele, tornando-o ainda mais flexível.

Modificações em um contêiner modificarão todas as referências a ele. Um Mutex deve ser criado para bloqueá-lo se o acesso multi-threaded for desejado.

Referências