Estructure el código FPScript de su fórmula en forma de una o varias instrucciones. Normalmente se escribe cada instrucción en una línea separada. Sin embargo, también puede escribir varias instrucciones en la misma línea. Simplemente debe separarlos con un punto y coma ";". También es posible dividir una instrucción en varias líneas. Para las líneas que deban resumirse con sus líneas subsiguientes, debe introducir una barra invertida "\" o un carácter de subrayado "_" como último carácter.
Asignación
Puede asignar un contenido diferente a una variable mediante una asignación. En una variable que contenga una serie de datos, por ejemplo, puede utilizar la asignación indexada para sobrescribir valores escalares o rangos. Puede utilizar la instrucción Set o la palabra clave As Object para asignar una referencia de objeto a una variable. A continuación, puede utilizar esta variable para acceder a las propiedades del objeto referenciado.
Tomar decisiones con If...Then...Else
La instrucción If...Then...Else se utiliza para comprobar si una condición tiene el valor TRUE o FALSE con el fin de ejecutar una o varias instrucciones en función de ello. Normalmente, la condición es una expresión con un operador de comparación para comparar dos variables o valores. Encontrará información sobre los operadores de comparación en Operadores de comparación. Las instrucciones If...Then...Elsepueden anidarse a cualquier profundidad.
Ejecución de un bloque si una condición resulta TRUE
En este caso, se omite la palabra clave Else:
If valor > 2 Then
Valor = 5
End
Ejecución de un bloque si una condición resulta TRUE y de otro si la condición resulta FALSE
Las instrucciones que se deben ejecutar si la condición resulta FALSE se insertan entre las palabras clave Else y End.
If valor > 2 Then
Valor = 5
Else
Valor = 0
End
Uso de bucles para repetir código
FPScript le ofrece una amplia gama de operaciones para buscar eventos y procesar conjuntos de datos en su totalidad. En raras ocasiones, sin embargo, necesitará bucles, por ejemplo, para recorrer los valores de una serie de datos. En un bucle, normalmente se define una variable de bucle que enumera las repeticiones. A continuación, puede utilizar esta variable en una operación de índice, por ejemplo, para acceder al valor correspondiente de un conjunto de datos:
// Declarar variable
Dim resultado
// Copiar serie de datos que se va a calcular
Resultado = serie de datos
// Recorrer todos los valores de la serie de datos
For Each Row i en serie de datos Do
// Poner a cero los valores inferiores a cero en el resultado
If series de datos[i] < 0 Then
Resultado[i] = 0
End
End
Return resultado // transferir la serie de datos del resultado
El ejemplo anterior utiliza un bucle para encontrar valores negativos en una serie de datos y establecerlos en el valor cero. Todas las sentencias entre Do y End se ejecutan varias veces, con la variable i contando desde 0 hasta el número de valores de la serie de datos menos 1. El ejemplo también muestra una instrucción condicional. La instrucción Resultado[i] = 0. solo se ejecuta si el valor i-ésimo de la serie de datos es menor que cero. En el ejemplo también se puede observar cómo los programas FPScript pueden hacerse más legibles mediante sangrías. Todas las instrucciones del bucle se han sangrado una posición de tabulación. Lo mismo ocurre con la declaración condicional.
Nota Solo debe utilizar bucles en los casos en que no exista una función adecuada y el problema no pueda describirse como una expresión aritmética. Las funciones incorporadas de FlexPro son muchas veces más rápidas que los bucles que se programan con FPScript. El ejemplo anterior puede reescribirse como sigue:
Dim resultado, Idx // declarar variable
Resultado = Serie de datos // copiar serie de datos que se va a calcular
// Determinar posiciones de todos los valores < 0
Idx = ValuesAboveLevel(serie de datos, 0, EVENT_INDEX + EVENT_COMPLEMENT)
// Poner a cero los valores en estas posiciones en el resultado
Resultado[Idx] = 0
Return resultado // transferir la serie de datos del resultado
Puede cancelar un bucle prematuramente utilizando la instrucción Break:
Dim resultado = 0
For Each Value v en serie de datos Do
If v == ? Then
Break
End
Resultado = resultado + v
End
Return resultado
FPScript le proporciona los siguientes bucles:
While...End: ejecuta un bucle mientras una condición tenga como resultado el valor TRUE.
Do...While: ejecuta un bucle hasta que una condición devuelve el valor FALSE.
For...End: utiliza un contador para repetir las instrucciones tantas veces como especifique el contador.
For Each Value...End: recorre todos los valores de un conjunto de datos. No se utiliza contador.
For Each Element...End: utiliza un contador para contar todos los elementos de una lista.
For Each Row...End: utiliza un contador para contar todas las filas de una serie de datos o una matriz de datos.
For Each Column...End: utiliza un contador para contar todas las columnas de una matriz de datos.
Repetición de instrucciones mientras una condición tenga el valor TRUE
El bucle While...End comprueba primero la condición y luego ejecuta las instrucciones mientras la condición sea TRUE. El siguiente ejemplo busca la posición en el conjunto de datos a partir de la cual se produce el primer valor positivo.
i = 0
While conjunto datos[i] < 0 Do
i = i + 1
End
Repetición de instrucciones hasta que una condición tenga el valor TRUE
El bucle Do...While ejecuta la instrucción una primera vez y luego comprueba la condición. El siguiente ejemplo calcula números aleatorios hasta que se genera un número mayor o igual que cero.
Dim Z
Do
Z = Noise(0)
While Z < 0
Uso de "For...End"
Con las instrucciones For...End, puede repetir un bloque de instrucciones tantas veces como se especifique. Para los bucles, utilice una variable de contador cuyo valor se incremente con cada bucle completado.
Dim a = "" # 3
For i = 0 To 2 Do
a[i] = TextInput("Introduzca un texto")
End
Uso de "For Each Row...End"
Si, como en el ejemplo anterior, debe iterarse sobre todos los elementos de un conjunto de datos, esto se puede implementar de forma más elegante con el bucle For Each Row...End:
Dim a = "" # Input("número")
For Each Row i In a Do
a[i] = TextInput("Introduzca un texto")
End