Criação e Atribuição de Variáveis
Abrangência: Disponível em builds superiores a 5.07
Variável de memória é um dos recursos mais importantes de uma linguagem.
As variáveis são áreas de memória criadas para armazenar informações utilizadas por um programa para a execução de tarefas.
Por exemplo, quando o usuário digita uma informação qualquer, como o nome de um produto em uma tela de um programa, esta informação é armazenada em uma variável de memória para posteriormente ser gravada ou impressa.
A partir do momento que uma variável é criada, não é necessário mais se referenciar ao seu conteúdo, mas ao seu nome.
O nome de uma variável é um identificador único que segue duas regras regras:
Considera apenas os primeiros 10 caracteres do nome.
O AdvPl não impede a criação de uma variável de memória cujo nome contenha mais de 10 caracteres, porém apenas os 10 primeiros serão considerados para a localização do conteúdo armazenado.
Portanto se forem criadas duas variáveis cujos 10 primeiros caracteres forem iguais, como nTotalGeralAnual e nTotalGeralMensal, as referências a qualquer uma delas no programa resultarão o mesmo valor (serão a mesma variável).
Quando o conteúdo da variável nTotalGeralMensal é exibido, o seu valor será de 300. Isso acontece porque no momento que esse valor foi atribuído à variável nTotalGeralAnual, o AdvPl considerou apenas os 10 primeiros caracteres, assim como o faz quando deve exibir o valor da variável nTotalGeralMensal, ou seja, considerou-as como a mesma variável.
Assim o valor original de 100 foi substituido pelo de 300.Restrição de caracteres aceitos para definição do nome.
Os nomes das variáveis devem sempre começar por uma letra ou o caracter de sublinhado ( _ ). No restante, pode conter letras, números e o caracter de sublinhado. Qualquer outro caracter, incluindo espaços em branco, não são permitidos.
O AdvPl permite a criação ilimitada de variáveis, dependendo apenas da memória disponível.
A seguir estão alguns nomes válidos para variáveis:TOT01 cNumero VAR_QUALQUER M_CARGO A11
E alguns nomes inválidos para variáveis:1CODIGO Inicia por um número M CARGO Contém um espaço em branco LOCAL Palavra reservada do AdvPl
O AdvPl não é uma linguagem de tipos rígidos para variáveis, ou seja, não é necessário informar o tipo de dados que determinada variável irá assumir no momento de sua declaração e o seu tipo pode mudar durante a execução do programa de acordo com novo valor a ela atribuído que seja de um tipo distinto.
Também não há necessidade de declarar variáveis em uma seção específica do seu código fonte, embora seja aconselhável declarar todas as variáveis necessárias no começo, tornando a manutenção mais fácil e evitando a declaração de variáveis desnecessárias.
Para declarar uma variável deve-se utilizar um identificador de escopo, seguido de uma lista de variáveis separadas por vírgula (,).
Um identificador de escopo é uma palavra chave que determina a que contexto do programa a variável declarada pertence.
Alguns tipos de contexto de variáveis são:
Uso de variável não declarada
Considere as linhas de código de exemplo a seguir:
Se esta linha for executada em um programa AdvPl, ocorrerá um erro de execução com a mensagem "variable does not exist nPercentual", pois esta variável nPercentual está sendo utilizada em uma expressão de cálculo sem ter sido declarada.
Para solucionar este erro, deve-se declarar a variável previamente da seguinte forma:
Veja que, neste exemplo, as variáveis são declaradas previamente utilizando o identificador de escopo local.
Quando a linha de cálculo for executada, o erro de variável não existente não ocorrerá novamente, porém, variáveis não inicializadas tem sempre o valor padrão nulo (Nil), e este valor nulo não pode ser utilizado em um cálculo pois também gerará erros de execução, visto que o valor nulo não pode ser dividido por 100.
Para resolver este problema basta inicializar a variável através de uma das formas a seguir:
ATENÇÃO! O comando store é obsoleto, mas existe apenas por compatibilidade com versões anteriores e outras linguagens como xBase.Importante
É aconselhável optar pelo operador de atribuição composto de dois pontos e sinal de igual, pois o operador de atribuição utilizando somente o sinal de igual pode ser facilmente confundido com o operador relacional (para comparação) durante a criação do programa.
Redeclaração de variável
ATENÇÃO! Ao compilar o código acima, o compilador apresentará a seguinte mensagem de alerta (Warning): "W0011 Variable CFILE redefined". Neste caso, a variável cFile inicialmente já é declarada como local por estar definida na lista de parâmetros da função e posteriormente é redeclarada na linha de declaração da variável Local cFileAux, pois na linha da instrução Local o sinal de atribuição após o nome da variável cFile (cFile := <valor>).
Para resolver a mensagem de Warning apresentada durante a compilação do EXEMPLO 1, veja que no EXEMPLO 2, a variável cFileAux assumirá o resultado de uma expressão que está entre parênteses (cFile := alltrim(cFile)).
Importante
Vale lembrar que cFile receberá o resultado de alltrim(cFile), somente durante a execução desta função, onde após sua finalização, cFile voltará a ter o valor original a ela definido.
Mudança de tipo de uma variável
Uma vez que um valor seja atribuído a uma varíavel, o seu tipo de dado passa a ser do tipo de dado do valor atribuído, ou seja, uma variável passa a ser numérica se for atribuído um número, ou passa a ser caractere se for atribuído um conteúdo texto, e assim por diante. Desta forma uma variável com um determinado tipo de dado, pode mudar de tipo apenas atribuindo um valor de outro tipo a ela como nos exemplos a seguir:
Veja que neste exemplo acima a variavel xVariavel é utilizada para armazenar tipos de dados distintos. A letra "x" em minúsculo no começo do nome da variável é utilizada apenas para indicar que uma variável pode assumir diversos tipos de dados, segundo a Notação Húngara (consulte documentação específica para mais detalhes).
Este código acima troca o valor da variável diversas vezes e exibe seu conteúdo para o usuário através da função Alert() que recebe um parâmetro que deve ser do tipo string de caracteres e por isso, dependendo do tipo de dado da variável xVariavel, pode ser necessário fazer uma conversão do tipo antes.
Apesar da flexibilidade no uso das variáveis, deve-se tomar cuidados na passagem de parâmetros para funções, comandos, concatenação ou soma de valores.
Note que quando a linha 21 do código é executada, a variável xVariavel terá o valor nulo (Nil) e com isso a tentativa de concatenação de tipos de dados diferentes gera erro de execução ("Valor nulo: " + xVariavel) onde trata-se de um TEXTO + NULO. Nesta linha do exemplo, ocorrerá um erro com a mensagem "type mismatch on +".
Com exceção do valor nulo, para os demais tipos de dados deve-se sempre utilizar funções de conversão quando houver necessidade de concatenar tipos de dados diferentes, por exemplo, nas linhas 08 e 18, onde foi feita a conversão do tipo para caracter usando a função cValToChar().
Note também que uma variável do tipo de dado lógico pode ser utilizada diretamente em uma expressão condicional IF, conforme está na linha 11:
A declaração de variáveis para os demais tipos de dados, matrizes e blocos de código, é exatamente igual ao descrito até agora, apenas existem algumas diferenças quanto a inicialização, que podem ser consultadas na documentação de inicialização de matrizes e blocos de código.