Simples

Sobre expressões simples

Em sua forma mais básica, expressões FormCalc são grupos de operadores, palavras-chave e literais agrupados de forma lógica. Por exemplo, todas estas expressões são simples:

    2 
    "abc" 
    2 - 3 * 10 / 2 + 7

Cada expressão FormCalc define um único valor seguindo uma ordem tradicional de operações, mesmo que essa ordem nem sempre seja óbvia a partir da sintaxe da expressão. Por exemplo, os seguintes conjuntos de expressões, quando aplicados a objetos em um projeto de formulário, geram resultados equivalentes:

Expressão

Equivalente a

Retorna

"abc"

"abc"

abc

2 - 3 * 10 / 2 + 7

2 - (3 * (10 / 2)) + 7

-6

10 * 3 + 5 * 4

(10 * 3) + (5 * 4)

50

0 and 1 or 2 > 1

(0 and 1) or (2 >1)

1 (true)

2 < 3 not 1 == 1

(2 < 3) not (1 == 1)

0 (false)

Como sugere a tabela anterior, todos os operadores FormCalc apresentam uma certa precedência quando aparecem dentro de expressões. A tabela a seguir ilustra essa hierarquia de operadores:

Precedência

Operador

Mais alta

=

 

(Unárias) - , + , not

 

* , /

 

+ , -

 

< , <= , > , >= , lt , le , gt , ge

 

== , <> , eq , ne

 

& , and

Mais baixa

| , or

Como forçar operandos

Nos casos em que um ou mais operandos em uma determinada operação não correspondem ao tipo esperado, FormCalc força esses operandos para que eles correspondam ao tipo necessário. A maneira como essa imposição ocorre depende do tipo de operando necessário para a operação.

Operações numéricas

Durante a execução de operações numéricas que envolvem operandos não numéricos, esses operandos são primeiramente forçados para seus equivalentes numéricos. Se um operando não numérico não for convertido com êxito em um valor numérico, seu valor será 0. Quando operações com valores nulos forem forçados para números, seus valores sempre serão iguais a zero.

A tabela a seguir fornece alguns exemplos de imposição de operandos não numéricos:

Expressão

Equivalente a

Retorna

(5 - "abc") * 3

(5 - 0) * 3

15

"100" / 10e1

100 / 10e1

1

5 + null + 3

5 + 0 + 3

8

Operações Boolianas

Durante a execução de operações Boolianas em operandos não Boolianos, esses operandos são primeiramente forçados para seus equivalentes Boolianos. Se um operando não Booliano não for convertido com êxito em um valor diferente de zero, seu valor será true (1); caso contrário, será false (0). Quando operandos com valores nulos forem forçados para um valor Booliano, esse valor sempre será false (0). Por exemplo, a expressão:

    "abc" | 2

resulta em 1. Ou seja, false | true = true, enquanto

    if ("abc") then 
    10 
    else 
    20 
    endif

resulta em 20.

Operações de string

Durante a execução de operações de string em operandos do tipo não string, esses operandos são primeiramente forçados para strings usando seus valores como strings. Quando operandos com valores nulos forem forçados para strings, seus valores sempre serão strings vazias. Por exemplo, a expressão:

    concat("The total is ", 2, " dollars and ", 57, " cents.")

resulta em "O total é 2 dólares e 57 centavos."

Nota: Durante a avaliação de uma expressão, se uma etapa intermediária resultar em NaN, +Inf ou -Inf, FormCalc gerará uma exceção de erro e propagará esse erro ao restante dessa expressão. Dessa forma, o valor da expressão sempre será 0. Por exemplo:
    3 / 0 + 1

resulta em 0.