|
Sobre expressões simplesEm 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 operandosNos 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éricasDurante 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 BoolianasDurante 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 stringDurante 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.
|
|
|