Operadores

Blog Advpl - Share knowledge

Operadores Comuns

Na documentação sobre variáveis há uma breve demonstração de como atribuir valores a uma variável da forma mais simples. O AdvPl amplia significativamente a utilização de variáveis através do uso de expressões e funções. Uma expressão é um conjunto de operadores e operandos cujo resultado pode ser atribuído a uma variável ou então analisado para a tomada de decisões. Por exemplo:

Neste exemplo são utilizadas algumas expressões para calcular o salário líquido após um aumento. Os operandos de uma expressão podem ser uma variável, uma constante, um campo de arquivo ou uma função.

Os operadores utilizados em AdvPl para cálculos matemáticos são:

+ Adição
Subtração
* Multiplicação
/ Divisão
** ou ^ Exponenciação
% Módulo (Resto da Divisão)

Os operadores utilizados em AdvPl para tratamento de caracteres são:

+ Concatenação de strings (união)
Concatenação de strings com eliminação dos brancos finais das strings intermediárias
$ Comparação de Substrings (contido em)

Os operadores utilizados em AdvPl para operações e avaliações relacionais são:

< Comparação Menor
> Comparação Maior
= Comparação Igual
== Comparação Exatamente Igual (para caracteres)
<= Comparação Menor ou Igual
>= Comparação Maior ou Igual
<> ou # ou != Comparação Diferente

 

Os operadores utilizados em AdvPl para operações e avaliações lógicas são:

.And. E lógico
.Or. OU lógico
.Not. ou ! NÃO lógico

 

Operadores de Atribuição

Os operadores utilizados em AdvPl para atribuição de valores a variáveis de memória são:

= Atribuição Simples
:= Atribuição em Linha
+= Adição e Atribuição em Linha
-= Subtração e Atribuição em Linha
*= Multiplicação e Atribuição em Linha
/= Divisão e Atribuição em Linha
**= ou ^= Exponenciação e Atribuição em Linha
%= Módulo (resto da divisão) e Atribuição em Linha

O sinal de igualdade é utilizado para atribuir valor a uma variável de memória.

O operador de atribuição em linha é caracterizado por dois pontos e o sinal de igualdade. Tem a mesma função do sinal de igualdade sozinho, porém aplia a atribuição às variáveis. Com ele pode-se atribuir mais de uma variável ao mesmo tempo.

Quando diversas variáveis são inicializadas em uma mesma linha, a atribuição começa da direita para a esquerda, ou seja, nVar3 recebe o valro zero inicialmente, nVar2 recebe o conteúdo de nVar3 e nVar1 recebe o conteúdo de nVar2 por final.

Com o operador de atribuição em linha, pode-se substituir as inicializações individuais de cada variável por uma inicialização apenas:

O operador de atribuição em linha também pode ser utilizado para substituir valores de campos em um banco de dados.

Os operadores de atribuição composta são uma facilidade da linguagem AdvPl para expressões de cálculo e atribuição. Com eles pode-se economizar digitação:

Operador Exemplo Equivalente a
+= X += Y X = X + Y
-= X -= Y X = X – Y
*= X *= Y X = X * Y
/= X /= Y X = X / Y
**= ou ^= X **= Y X = X ** Y
%= X %= Y X = X % Y

 

Operadores de IncrementoDecremento

A linguagem AdvPl possui operadores para realizar incremento ou decremento de variáveis apoteketgenerisk.com/. Entende-se por incremento aumentar o valor de uma variável numérica em 1 e entende-se por decremento diminuir o valor da variável em 1. Os operadores são:

++ Incremento Pós ou Pré-fixado
Decremento Pós ou Pré-fixado

Os operadores de decremento/incremento podem ser colocados tanto antes (pré-fixado) como depois (pós-fixado) do nome da variável. Dentro de uma expressão, a ordem do operador é muito importante, podendo alterar o resultado da expressão. Os operadores incrementais são executados da esquerda para a direita dentro de uma expressão.

O valor da variável nB resulta em 21, pois a primeira referência a nA (antes do ++) continha o valor 10 que foi considerado e imediatamente aumentado em 1. Na segunda referência a nA, este já possuía o valor 11. O que foi efetuado foi a soma de 10 mais 11, igual a 21. O resultado final após a execução destas duas linhas é a variável nB contendo 21 e a variável nA contendo 11.

No entanto:

Resulta em 22, pois o operador incremental aumentou o valor da primeira nA antes que seu valor fosse considerado.

 

Operadores Especiais

Além dos operadores comuns, o AdvPl possui alguns outros operadores ou identificadores. Estas são suas finalidades:

() Agrupamento ou Função
[] Elemento de Matriz
{} Definição de Matriz, Constante ou Bloco de Código
-> Identificador de Apelido
& Macrosubstituição
@ Passagem de parâmetro por referência

Os parênteses são utilizados para agrupar elementos em uma expressão mudando a ordem de precedência da avaliação da expressão (segundo as regras matemáticas por exemplo). Também servem para envolver os argumentos de uma função. Veja a documentação sobre precedência de operadores para maiores detalhes.

Os colchetes são utilizados para especificar um elemento específico de uma matriz. Por exemplo, A[3,2], refere-se ao elemento da matriz A na linha 3, coluna 2.

As chaves são utilizadas para a especificação de matrizes literais ou blocos de código. Por exemplo, A:={10,20,30} cria uma matriz chamada A com três elementos.

O símbolo -> identifica um campo de um arquivo diferenciando-o de uma variável. Por exemplo, FUNC->nome refere-se ao campo nome do arquivo FUNC. Mesmo que exista uma variável chamada nome, é o campo nome que será acessado.

O símbolo & identifica uma avaliação de expressão através de macro e é visto em detalhes na documentação sobre macrossubstituição.

O símbolo @ é utilizado para indicar que durante a passagem de uma variável para uma função ou procedimento ela seja tomada como uma referência e não como valor.

 

Ordem de Precedência dos Operadores

Dependendo do tipo de operador, existe uma ordem de precedência para a avaliação dos operandos. Em princípio, todas as operações com os operadores são realizadas da esquerda para a direita se eles tiverem o mesmo nível de prioridade.

A ordem de precedência, ou nível de prioridade de execução, dos operadores em AdvPl é:

  • 1. Operadores de Incremento/Decremento pré-fixado
  • 2. Operadores de String
  • 3. Operadores Matemáticos
  • 4. Operadores Relacionais
  • 5. Operadores Lógicos
  • 6. Operadores de Atribuição
  • 7. Operadores de Incremento/Decremento pós-fixado

Em expressões complexas com diferentes tipos de operadores, a avaliação seguirá essa sequência. Caso exista mais de um operador do mesmo tipo (ou seja, de mesmo nível), a avaliação se dá da esquerda para direita. Para os operadores matemáticos entretanto há uma precedência a seguir:

  • 1. Exponenciação
  • 2. Multiplicação e Divisão
  • 3. Adição e Subtração

Considere o exemplo:

O resultado desta expressão é 30, pois primeiramente é calculada a exponenciação 2^3(=8), então são calculadas as multiplicações e divisões 10/2(=5) e 5*3(=15), e finalmente as adições resultando em 2+5+15+8(=30).

A utilização de parênteses dentro de uma expressão altera a ordem de precedência dos operadores. Operandos entre parênteses são analisados antes dos que se encontram fora dos parênteses. Se existirem mais de um conjunto de parênteses não-aninhados, o grupo mais a esquerda será avaliado primeiro e assim sucessivamente.

No exemplo acima primeiro será calculada a exponenciação 2^3(=8). Em seguida 2+10(=12) será calculado, 2+5(=7) calculado, e finalmente a divisão e a multiplicação serão efetuadas, o que resulta em 12/7*3+8(=13.14).

Se existirem vários parênteses aninhados, ou seja, colocados um dentro do outro, a avaliação ocorrerá do parênteses mais intero em direção ao mais externo.