|
Informazioni sulle espressioni sempliciNella forma più semplice, le espressioni FormCalc sono costituite da gruppi di operatori, parole chiave e letterali legati tra loro in modo logico. Ad esempio, sono riportate di seguito alcune espressioni semplici:
2
"abc"
2 - 3 * 10 / 2 + 7
Ciascuna espressione FormCalc equivale ad un singolo valore, ottenuto seguendo un ordine tradizionale di esecuzione delle operazioni, anche se tale ordine non è sempre ovviamente deducibile dalla sintassi dell'espressione. Ad esempio, il seguente insieme di espressioni applicato a una struttura del modulo genera risultati equivalenti:
Espressione
|
Equivalente a
|
Valore restituito
|
"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)
|
Come si evince dalla tabella precedente, tutti gli operatori FormCalc hanno una determinata precedenza quando vengono utilizzati all'interno di un'espressione. La tabella seguente descrive la gerarchia di questo operatore:
Precedenza
|
Operatore
|
Più alta
|
=
|
|
(Unario) - , + , not
|
|
* , /
|
|
+ , -
|
|
< , <= , > , >= , lt , le , gt , ge
|
|
== , <> , eq , ne
|
|
& , and
|
Più bassa
|
| , or
|
Promozione degli operandiSe uno o più operandi contenuti in una determinata operazione non corrispondono al tipo previsto per quell'operazione, FormCalc promuove gli operandi per farli corrispondere al tipo richiesto. Il modo in cui avviene questa promozione dipende dal tipo di operando richiesto dall'operazione.
Operazioni numericheQuando si eseguono operazioni numeriche che coinvolgono operandi non numerici, gli operandi non numerici vengono preventivamente promossi al relativo equivalente numerico. Se l'operando non numerico non può essere convertito in un valore numerico, il suo valore sarà (0). Se degli operandi con valore nullo vengono promossi a numeri, il loro valore sarà sempre zero.
Nella tabella seguente sono riportati alcuni esempi di promozione di operandi non numerici.
Espressione
|
Equivalente a
|
Valore restituito
|
(5 - "abc") * 3
|
(5 - 0) * 3
|
15
|
"100" / 10e1
|
100 / 10e1
|
1
|
5 + null + 3
|
5 + 0 + 3
|
8
|
Operazioni booleaneQuando si eseguono operazioni booleane su operandi non booleani, gli operandi non booleani vengono inizialmente promossi al relativo equivalente booleano. Se un operando non booleano non viene convertito correttamente in un valore diverso da zero, il relativo valore è vero (1); altrimenti il relativo valore è falso (0). Quando operandi con valore null vengono promossi a un valore booleano, il valore è sempre falso (0). Ad esempio, l'espressione:
"abc" | 2
restituisce 1. Ovvero: falso | vero = vero; mentre
if ("abc") then
10
else
20
endif
restituisce 20.
Operazioni stringaQuando si eseguono operazioni stringa su operandi non-stringa, gli operandi non-stringa vengono preliminarmente promossi a stringhe utilizzando il relativo valore come stringa. Quando si promuovono operandi con valori null a stringhe, il relativo valore è sempre una stringa vuota. Ad esempio, l'espressione:
concat("The total is ", 2, " dollars and ", 57, " cents.")
restituisce "Il totale è 2 euro e 57 centesimi."
Nota: Se durante la valutazione di un'espressione un passaggio intermedio produce uno dei seguenti risultati: NaN, +Inf, o -Inf, FormCalc genera un'eccezione di errore e propaga l'errore al resto dell'espressione. In tal caso, il valore dell'espressione sarà sempre zero. Ad esempio:
3 / 0 + 1
restituisce 0.
|
|
|