Data types
Mais ações
| Note: Esta página é sobre ACS. Para ZScript, veja ZScript data types. |
ACS suporta vários tipos de dados que você pode usar. Desses, a maioria é tratada como “gambiarras”. Na prática, ACS só suporta um tipo de dado de verdade: o tipo inteiro.
Integer
O tipo inteiro é o tipo de dado básico. Um inteiro é qualquer número inteiro (sem parte fracionária) e pode ser negativo, positivo ou zero. O intervalo de um inteiro vai de -2.147.483.648 a 2.147.483.647. Para declarar uma variável desse tipo você usa a palavra-chave int.
Boolean
ACS tem um suporte “hackeado” para o tipo booleano. Esse tipo pode guardar um valor verdadeiro ou falso (ou 1 e 0). Em ACS você usa a palavra-chave bool para declarar uma variável booleana. Mesmo usando um nome diferente, no fim das contas é a mesma coisa que um inteiro e tem todas as mesmas propriedades.
//Isto é legal bool bTest = 7;
Character
O suporte ao tipo caractere é praticamente o mesmo de C/C++, exceto que você precisa usar o tipo inteiro. Ao atribuir caracteres a uma variável, você deve colocá-los entre aspas simples, como neste exemplo:
//Isto atribui a variável à letra a int Test = 'a';
Você também pode usar caracteres especiais: ASCII NUL '\0', '\\', '\n' para nova linha e '\t' para tabulação horizontal.
String
Em ACS você pode definir literais de string que se parecem com isto:
//isto é um literal de string "OMG its a string"
Quando o compilador vê isso, ele adiciona a string à tabela de strings e então atribui a ela um número de índice. A variável de string, declarada com a palavra-chave str, não guarda a string em si, mas sim o índice da tabela de strings, parecido com como literais de string em C “decaem” para ponteiros em certos contextos. Em outras palavras, a variável de string é a mesma coisa que um inteiro e tem todas as suas propriedades. A única forma do ACS “saber” que aquilo é uma string é quando ela é usada por funções especiais que esperam uma string.
//Esta função na verdade recebe o índice dessa string na tabela de strings //mas a função sabe pegar esse número e usá-lo para procurar na tabela CheckInventory("Fist");
Este é outro exemplo de como strings são tratadas:
//Aqui tentamos somar duas strings str Test = "omg its a " + "string!"; print(s:Test); //Isto imprime "string!" e NÃO "omg its a string!" //o que realmente aconteceu foi isto Test = 0 + 1; //então você vê que o que está sendo armazenado é o índice
Para concatenar strings, não use +; use StrParam no lugar.
Fixed point
ACS tem um suporte bem básico para tipos de ponto fixo. O que acontece é que você precisa atribuí-los a tipos inteiros. A parte inteira fica nos bits 16–31 do inteiro e a parte fracionária fica nos bits 0–15.
3 2 1 0 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 9 8 7 6 5 4 3 2 1 0 +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+ | Parte Inteira | Parte Fracionária | +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
Para ver isso em ação, temos este exemplo:
//Isto atribui 1.0 a um inteiro int Test = 1.0; //O valor inteiro real é 65536, como mostrado pelo comando abaixo PrintBold(d:Test); PrintBold(f:Test); // Isto imprime como ponto fixo, e vai mostrar "1"