Flujo de control
Independientemente de la simplicidad o la complejidad de un método o de una función, siempre utilizará uno o varios de los tres tipos de estructuras de programación. Las estructuras de programación determinan el flujo de ejecución, si se ejecutan y el orden de las líneas de instrucciones dentro de un método. Hay tres tipos de estructuras:
-
Secuencial: una estructura secuencial es una estructura simple y lineal. Una secuencia es una serie de sentencias que 4D ejecuta una tras otra, de la primera a la última. Una instrucción de una línea, utilizada frecuentemente para los métodos de los objetos, es el caso más simple de una estructura secuencial. Por ejemplo:
[People]lastName:=Uppercase([People]lastName)
-
Ramificación: una estructura de ramificación permite que los métodos prueben una condición y tomen caminos alternativos, dependiendo del resultado. La condición es una expresión booleana, una expresión que evalúa TRUE o FALSE. Una estructura de ramificación es la estructura
If...Else...End if
, que dirige el flujo del programa a lo largo de una de dos rutas. La otra estructura de ramificación es la estructuraCase of...Else...End case
, que dirige el flujo del programa a una de muchas rutas. -
Bucle: cuando se escriben métodos, es muy común encontrarse con que se necesita que una secuencia de sentencias se repita un número de veces. Para hacer frente a esta necesidad, el lenguaje 4D ofrece las siguientes estructuras de bucle:
Los bucles se controlan de dos maneras: o bien se repiten hasta que se cumple una condición, o bien se repiten un número determinado de veces. Cada estructura de bucle puede utilizarse de cualquier manera, pero los bucles While
y los bucles Repeat
son más apropiados para repetir hasta que se cumpla una condición, y los bucles For
son más apropiados para hacer un bucle un número determinado de veces. For each...End for each
permite la mezcla en ambos sentidos y está diseñado para realizar bucles dentro de objetos y colecciones.
Nota: 4D permite anidar estructuras de programación hasta una "profundidad" de 512 niveles.
If...Else...End if
La sintaxis de la estructura condicional If...Else...End if
es:
If(Boolean_Expression)
statement(s)
Else
statement(s)
End if
Tenga en cuenta que la parte Else
es opcional; puede escribir:
If(Boolean_Expression)
statement(s)
End if
La estructura If...Else...End if
permite a su método elegir entre dos acciones, dependiendo de si una prueba (una expresión booleana) es TRUE o FALSE. Cuando la expresión booleana es TRUE, se ejecutan las sentencias que siguen inmediatamente a la prueba. Si la expresión booleana es FALSE, se ejecutan las instrucciones que siguen a la línea Else. El Else
es opcional; si se omite Else, la ejecución continúa con la primera instrucción (si la hay) que sigue al End if
.
Tenga en cuenta que la expresión booleana siempre se evalúa completamente. Considere en particular la siguiente prueba:
If(MethodA & MethodB)
...
End if
La expresión es TRUE sólo si los dos métodos son TRUE. Sin embargo, incluso si MethodA devuelve FALSE, 4D seguirá evaluando MethodB, lo que supone una pérdida de tiempo inútil. En este caso, es más interesante utilizar una estructura como:
If(MethodA)
If(MethodB)
...
End if
End if
El resultado es similar y MethodB se evalúa sólo si es necesario.
Note: The ternary operator allows writing one-line conditional expressions and can replace a full sequence of If..