|
Om enkla uttryckFormCalc-uttryck är i grund och botten operatorer, nyckelord och explicita värden som grupperats på ett logiskt sätt. Följande är exempel på enkla uttryck:
2
"abc"
2 - 3 * 10 / 2 + 7
Varje FormCalc-uttryck resulterar i ett värde efter att ett antal operationer har utförts. Den ordning i vilken operationerna utförs motsvaras dock inte alltid av syntaxen. Nedanstående uttryck ger likvärdiga resultat när de tillämpas på objekt i en formulärdesign:
Uttryck
|
Likvärdigt med
|
Returnerar
|
"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 (sant)
|
2 < 3 not 1 == 1
|
(2 < 3) not (1 == 1)
|
0 (falskt)
|
Tabellen ovan visar att alla operatorer i FormCalc kan ha olika prioritet när de förekommer i uttryck. Nedanstående tabell visar hierarkin för operatorer:
Prioritet
|
Operator
|
Högsta
|
=
|
|
- , + , not (unära operatorer)
|
|
* , /
|
|
+ , -
|
|
< , <= , > , >= , lt , le , gt , ge
|
|
== , <> , eq , ne
|
|
& , and
|
Lägsta
|
| , or
|
Typomvandling av operanderOm en eller flera av operanderna i en given operation inte stämmer med den förväntade typen omvandlas operanderna till en typ som matchar. Hur omvandlingen går till beror på vilken typ av operand som efterfrågas.
Numeriska operationerVid numeriska operationer med icke-numeriska operander typomvandlas de icke-numeriska operanderna först till sin numeriska motsvarighet. Om den icke-numeriska operanden inte kan konverteras till ett numeriskt värde används värdet 0. När null-operander typomvandlas till siffror blir värdet alltid 0.
I tabellen nedan finns några exempel på hur icke-numeriska operander typomvandlas:
Uttryck
|
Likvärdigt med
|
Returnerar
|
(5 - "abc") * 3
|
(5 - 0) * 3
|
15
|
"100" / 10e1
|
100 / 10e1
|
1
|
5 + null + 3
|
5 + 0 + 3
|
8
|
Booleska operationerVid booleska operationer med icke-booleska operander typomvandlas de icke-booleska operanderna först till sin booleska motsvarighet. Om den icke-booleska operanden inte kan konverteras till ett icke-nollvärde blir värdet sant (1). I annat fall är värdet falskt (0). När null-operander typomvandlas till booleska värden blir värdet alltid falskt (0). Ta t ex följande uttryck:
"abc" | 2
blir 1. Alltså, falskt | sant = sant, men
if ("abc") then
10
else
20
endif
blir 20.
SträngoperationerNär strängoperationer görs med icke-strängoperander typomvandlas icke-strängoperanderna först till strängar med deras värden som sträng. När null-operander typomvandlas till strängar blir värdet alltid en tom sträng. Ta t ex följande uttryck:
concat("The total is ", 2, " dollars and ", 57, " cents.")
som blir "Summan är 2 kronor och 57 öre."
Obs! Om ett mellansteg genererar NaN, +Inf eller -Inf under utvärderingen av ett uttryck uppstår ett undantagsfel. Felet används genom hela uttrycket. Därför kommer uttrycket alltid att ha värdet 0. Exempel:
3 / 0 + 1
blir 0.
|
|
|