|
Acerca de las expresiones simplesEn su forma más básica, las expresiones de FormCalc son grupos de operadores, palabras clave y literales vinculados de formas lógicas. Por ejemplo, éstas son expresiones sencillas:
2
"abc"
2 - 3 * 10 / 2 + 7
Todas las expresiones de FormCalc se resuelven en un valor sencillo, seguido de un orden tradicional de operaciones, aunque este orden no siempre resulta obvio a partir de la sintaxis de la expresión. Por ejemplo, cuando se aplican los siguientes conjuntos de expresiones a objetos de un diseño de formulario, producen resultados equivalentes:
Expresión
|
Equivale a
|
Devuelve
|
"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 sugiere la tabla anterior, todos los operadores de FormCalc tienen una prioridad determinada cuando aparecen en las expresiones. La tabla siguiente ilustra esta jerarquía de operadores:
Prioridad
|
Operador
|
La más alta
|
=
|
|
(Unario) - , + , not
|
|
* , /
|
|
+ , -
|
|
< , <= , > , >= , lt , le , gt , ge
|
|
== , <> , eq , ne
|
|
& , and
|
La más baja
|
| , or
|
Promoción de operandosEn los casos en los que uno o varios operandos de una operación determinada no coincidan con el tipo previsto para dicha operación, FormCalc “promueve” los operandos para que coincidan con el tipo necesario. La forma en que se realiza esta promoción depende del tipo de operando que requiera la operación.
Operaciones numéricasCuando se realizan operaciones numéricas en las que participen operandos no numéricos, éstos son los primeros que se convierten en su equivalente numérico. Si el operando no numérico no se convierte satisfactoriamente en un valor numérico, su valor será 0. Cuando se convierten operandos de valor nulo en números, su valor siempre es cero.
En la tabla siguiente se muestran algunos ejemplos de este tipo de conversión de operandos no numéricos:
Expresión
|
Equivale a
|
Devuelve
|
(5 - "abc") * 3
|
(5 - 0) * 3
|
15
|
"100" / 10e1
|
100 / 10e1
|
1
|
5 + null + 3
|
5 + 0 + 3
|
8
|
Operaciones booleanasCuando se realizan operaciones booleanas con operandos no booleanos, éstos son los primeros que se convierten en sus equivalentes booleanos. Si el operando no booleano no se convierte satisfactoriamente en un valor diferente de cero, su valor será verdadero (1); en caso contrario, su valor será falso (0). Cuando se convierten operandos de valor nulo en valores booleanos, su valor siempre es falso (0). Por ejemplo, la expresión:
"abc" | 2
se evalúa como 1. Es decir, false | true = true, de donde
if ("abc") then
10
else
20
endif
se evalúa como 20.
Operaciones con cadenasCuando se realizan operaciones de cadenas en operandos que no sean cadenas, éstos son los que primero se convierten en cadenas, mediante el uso de su valor como tales. Cuando se convierten operandos de valor nulo en cadenas, su valor siempre será el de cadena vacía. Por ejemplo, la expresión:
concat("The total is ", 2, " dollars and ", 57, " cents.")
se evalúa como "The total is 2 dollars and 57 cents."
Nota: si, durante la evaluación de una expresión, uno de los pasos intermedios genera NaN, +Inf o -Inf, FormCalc genera una excepción y extiende el error al resto de la expresión. De este modo, el valor de la expresión siempre será 0. Por ejemplo:
3 / 0 + 1
se evalúa como 0.
|
|
|