Enkla

Om enkla uttryck

FormCalc-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 operander

Om 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 operationer

Vid 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 operationer

Vid 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ängoperationer

Nä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.