Classe Variant

Sobre

Variant é o tipo de dados mais importante da Godot, é a classe mais importante da engine. Uma Variant ocupa apenas 20 bytes e pode armazenar quase qualquer tipo de dado dentro de si. As Variant raramente são usadas para reter informações por longos períodos de tempo; em vez disso, são usadas principalmente para comunicação, edição, serialização e, geralmente, movimentação de dados.

Uma Variant pode:

  • Guardar quase qualquer tipo de dado

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

  • Be hashed, so it can be compared quickly to other variants

  • Ser usado para conversões seguras entre tipos de dados

  • Ser usado para abstrair métodos de chamada e seus argumentos (a Godot exporta todas as suas funções por meio de Variants)

  • Ser usado para adiar chamadas [de métodos/funções] 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.

Referências:

Contêineres: Dicionário e Matriz

Ambos são implementados usando Variants. Um dicionário pode corresponder a qualquer tipo de dado usado como chave para qualquer outro tipo de dado. Uma Matriz contém apenas um array de Variants. Obviamente, uma Variant também pode conter um Dicionário e um Matriz dentro, tornando-o ainda mais flexível.

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

O suporte do modo de cópia na gravação (Copy-on-write: COW) para contêineres foi eliminado com a Godot 3.0.