Simples

Acerca de las expresiones simples

En 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

 

&amp; , and

La más baja

| , or

Promoción de operandos

En 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éricas

Cuando 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 booleanas

Cuando 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 cadenas

Cuando 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.