Você está na página 1de 9

Operadores da Linguagem Macro Substituico

Reviso: 13/07/2002 Abrangncia Verso 5.07 Verso 5.08 Verso 6.09 Verso 7.10 Verses Anteriores

O operador de macro substituio, simbolizado pelo "e" comercial (&), utilizado para a avaliao de expresses em tempo de execuo. Funciona como se uma expresso armazenada fosse compilada em tempo de execuo, antes de ser de fato executada. Considere o exemplo:
01 X := 10 02 Y := "X + 1" 03 B := &Y // O contedo de B ser 11

A varivel X atribuda com o valor 10, enquanto a varivel Y atribuda com a string de caracteres contendo "X + 1". A terceira linha utiliza o operador de macro. Esta linha faz com que o nmero 11 seja atribudo varivel B. Pode-se perceber que esse o valor resultante da expresso em formato de caractere contida na varivel Y. Utilizando-se uma tcnica matemtica elementar, a substituio, temos que na segunda linha, Y definido como "X + 1", ento pode-se substituir Y na terceira linha:
03 B := &"X + 1"

O operador de macro cancela as aspas:


03 B := X + 1

Pode-se perceber que o operador de macro remove as aspas, o que deixa um pedao de cdigo para ser executado. Deve-se ter em mente que tudo isso acontece em tempo de eecuo, o que torna tudo muito dinmico. Uma utilizao interessante criar um tipo de calculadora, ou avaliador de frmulas, que determina o resultado de algo que o usurio digita. O operador de macro tem uma limitao: variveis referenciadas dentro da string de caracteres (X nos exemplos anteriores) no podem ser locais.

Operadores Comuns
Reviso: 13/07/2002 Abrangncia Verso 5.07 Verso 5.08 Verso 6.09 Verso 7.10 Verses Anteriores

Na documentao sobre variveis h uma breve demonstrao de como atribuir valores a uma varivel da forma mais simples. O AdvPl amplia significativamente a utilizao de variveis atravs do uso de expresses e funes. Uma expresso um conjunto de operadores e operandos cujo resultado pode ser atribudo a uma varivel ou ento analisado para a tomada de decises. Por exemplo:
Local nSalario := 1000, nDesconto := 0.10 Local nAumento, nSalLiquido nAumento := nSalario * 1.20 nSalLiquido := nAumento * (1-nDesconto)

Neste exemplo so utilizadas algumas expresses para calcular o salrio lquido aps um aumento. Os operandos de uma expresso podem ser uma varivel, uma constante, um campo de arquivo ou uma funo.

Operadores Matemticos
Os operadores utilizados em AdvPl para clculos matemticos so: + * / ** ou ^ % Adio Subtrao Multiplicao Diviso Exponenciao Mdulo (Resto da Diviso)

Operadores de String
Os operadores utilizados em AdvPl para tratamento de caracteres so: + Concatenao de strings (unio) - Concatenao de strings com eliminao dos brancos finais das strings intermedirias $ Comparao de Substrings (contido em)

Operadores Relacionais
Os operadores utilizados em AdvPl para operaes e avaliaes relacionais so: < > = == <= >= <> ou # ou != Comparao Menor Comparao Maior Comparao Igual Comparao Exatamente Igual (para caracteres) Comparao Menor ou Igual Comparao Maior ou Igual Comparao Diferente

Operadores Lgicos
Os operadores utilizados em AdvPl para operaes e avaliaes lgicas so: .And. E lgico .Or. OU lgico .Not. ou ! NO lgico

Operadores Especiais
Reviso: 13/07/2002 Abrangncia Verso 5.07 Verso 5.08 Verso 6.09 Verso 7.10 Verses Anteriores

Alm dos operadores comuns, o AdvPl possui alguns outros operadores ou identificadores. Estas so suas finalidades: () [] {} -> & @ Agrupamento ou Funo Elemento de Matriz Definio de Matriz, Constante ou Bloco de Cdigo Identificador de Apelido Macrosubstituio Passagem de parmetro por referncia

Os parnteses so utilizados para agrupar elementos em uma expresso mudando a ordem de precedncia da avaliao da expresso (segundo as regras matemticas por exemplo). Tambm servem para envolver os argumentos de uma funo. Veja a documentao sobre precedncia de operadores para maiores detalhes. Os colchetes so utilizados para especificar um elemento especfico de uma matriz. Por exemplo, A[3,2], refere-se ao elemento da matriz A na linha 3, coluna 2. As chaves so utilizadas para a especificao de matrizes literais ou blocos de cdigo. Por exemplo, A:={10,20,30} cria uma matriz chamada A com trs elementos. O smbolo -> identifica um campo de um arquivo diferenciando-o de uma varivel. Por exemplo, FUNC->nome refere-se ao campo nome do arquivo FUNC. Mesmo que exista uma varivel chamada nome, o campo nome que ser acessado. O smbolo & identifica uma avaliao de expresso atravs de macro e visto em detalhes na documentao sobre macrossubstituio. O smbolo @ utilizado para indicar que durante a passagem de uma varivel para uma funo ou procedimento ela seja tomada como uma referncia e no como valor.

Operadores de Atribuico
Reviso: 13/07/2002 Abrangncia Verso 5.07 Verso 5.08 Verso 6.09 Verso 7.10 Verses Anteriores

Os operadores utilizados em AdvPl para atribuio de valores a variveis de memria so: = := += -= *= /= **= ou ^= %= Atribuio Simples Atribuio em Linha Adio e Atribuio em Linha Subtrao e Atribuio em Linha Multiplicao e Atribuio em Linha Diviso e Atribuio em Linha Exponenciao e Atribuio em Linha Mdulo (resto da diviso) e Atribuio em Linha

Atribuio Simples
O sinal de igualdade utilizado para atribuir valor a uma varivel de memria.
nVariavel = 10

Atribuio em Linha
O operador de atribuio em linha caracterizado por dois pontos e o sinal de igualdade. Tem a mesma funo do sinal de igualdade sozinho, porm aplia a atribuio s variveis. Com ele pode-se atribuir mais de uma varivel ao mesmo tempo.
nVar1 := nVar2 := nVar3 := 0

Quando diversas variveis so inicializadas em uma mesma linha, a atribuio comea da direita para a esquerda, ou seja, nVar3 recebe o valro zero inicialmente, nVar2 recebe o contedo de nVar3 e nVar1 recebe o contedo de nVar2 por final. Com o operador de atribuio em linha, pode-se substituir as inicializaes individuais de cada varivel por uma inicializao apenas:

Local nVar1 := 0, nVar2 := 0, nVar3 := 0

por
Local nVar1 := nVar2 := nVar3 := 0

O operador de atribuio em linha tambm pode ser utilizado para substituir valores de campos em um banco de dados.

Atribuio Composta
Os operadores de atribuio composta so uma facilidade da linguagem AdvPl para expresses de clculo e atribuio. Com eles pode-se economizar digitao: Operador += -= *= /= **= ou ^= %= Exemplo X += Y X -= Y X *= Y X /= Y X **= Y X %= Y Equivalente a X=X+Y X=X-Y X=X*Y X=X/Y X = X ** Y X=X%Y

Operadores de Incremento/Decremento
Reviso: 13/07/2002 Abrangncia Verso 5.07 Verso 5.08 Verso 6.09 Verso 7.10 Verses Anteriores

A linguagem AdvPl possui operadores para realizar incremento ou decremento de variveis. Entende-se por incremento aumentar o valor de uma varivel numrica em 1 e entende-se por decremento diminuir o valor da varivel em 1. Os operadores so: ++ Incremento Ps ou Pr-fixado -- Decremento Ps ou Pr-fixado Os operadores de decremento/incremento podem ser colocados tanto antes (pr-fixado) como depois (ps-fixado) do nome da varivel. Dentro de uma expresso, a ordem do operador muito importante, podendo alterar o resultado da expresso. Os operadores incrementais so executados da esquerda para a direita dentro de uma expresso.
Local nA := 10 Local nB := nA++ + nA

O valor da varivel nB resulta em 21, pois a primeira referncia a nA (antes do ++) continha o valor 10 que foi considerado e imediatamente aumentado em 1. Na segunda referncia a nA, este j possua o valor 11. O que foi efetuado foi a soma de 10 mais 11, igual a 21. O resultado final aps a execuo destas duas linhas a varivel nB contendo 21 e a varivel nA contendo 11. No entanto:
Local nA := 10 Local nB := ++nA + nA

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

Ordem de Precedencia dos Operadores


Reviso: 13/07/2002 Abrangncia Verso 5.07 Verso 5.08 Verso 6.09 Verso 7.10 Verses Anteriores

Dependendo do tipo de operador, existe uma ordem de precedncia para a avaliao dos operandos. Em princpio, todas as operaes com os operadores so realizadas da esquerda para a direita se eles tiverem o mesmo nvel de prioridade. A ordem de precedncia, ou nvel de prioridade de execuo, dos operadores em AdvPl :

1. Operadores de Incremento/Decremento pr-fixado 2. Operadores de String 3. Operadores Matemticos 4. Operadores Relacionais 5. Operadores Lgicos 6. Operadores de Atribuio 7. Operadores de Incremento/Decremento ps-fixado

Em expresses complexas com diferentes tipos de operadores, a avaliao seguir essa sequncia. Caso exista mais de um operador do mesmo tipo (ou seja, de mesmo nvel), a avaliao se d da esquerda para direita. Para os operadores matemticos entretanto h uma precedncia a seguir:

1. Exponenciao 2. Multiplicao e Diviso 3. Adio e Subtrao

Considere o exemplo:
Local nResultado := 2+10/2+5*3+2^3

O resultado desta expresso 30, pois primeiramente calculada a exponenciao 2^3(=8), ento so calculadas as multiplicaes e divises 10/2(=5) e 5*3(=15), e finalmente as adies resultando em 2+5+15+8(=30).

Alterao da Precedncia
A utilizao de parnteses dentro de uma expresso altera a ordem de precedncia dos operadores. Operandos entre parnteses so analisados antes dos que se encontram fora dos parnteses. Se existirem mais de um conjunto de parnteses no-aninhados, o grupo mais a esquerda ser avaliado primeiro e assim sucessivamente.
Local nResultado := (2+10)/(2+5)*3+2^3

No exemplo acima primeiro ser calculada a exponenciao 2^3(=8). Em seguida 2+10(=12) ser calculado, 2+5(=7) calculado, e finalmente a diviso e a multiplicao sero efetuadas, o que resulta em 12/7*3+8(=13.14). Se existirem vrios parnteses aninhados, ou seja, colocados um dentro do outro, a avaliao ocorrer do parnteses mais intero em direo ao mais externo.

Você também pode gostar