lunes, 29 de octubre de 2012

Estructuras de Control en Power Builder


-->
Los flujos de control permiten que las acciones ha ser realizadas puedan ser bifurcadas a otra dependiendo de alguna expresión condicional. Existen 2 tipos de flujos de control

CONDICIONAL
Se refiere a que el flujo de control es bifurcado desde una sentencia, o conjunto de estas, a otra, o conjunto de estas. Existen 2 clase de Flujos de control condicionales

IF..THEN..ELSE
La sentencia 'IF' permite bifurcar la ejecución del código entre 2 caminos posibles dependiendo de la veracidad o no de una expresión condicional. El tamaño, en líneas de código, de los segmentos, 'verdadero' o 'falso' no tienen un limite.

Ejemplo:
     If monto_cuota=13 Then nombre= 'Ramiro'
            Else     nombre= 'Francisco'
      End If
También es posible anidar varios 'If..Then..Else' consecutivamente.


Ejemplo:
If monto_cuota=13 Then
nombre= 'Ramiro'
ElseIf monto_cuota=15 Then
nombre= 'Roberto'
Else
nombre= 'Francisco'
End If


CHOOSE
Permite bifurcar la ejecución del código entre múltiples caminos posibles; dependiendo de la veracidad o no de una expresión condicional, principalmente una variable. El tamaño, en líneas de código, de los segmentos 1..'n' no tienen un limite.
Ejemplo:
Choose case monto_cuota
Case Is< 13:  nombre='Ramiro'
Case 16 To 48: nombre= 'Roberto'
Else
nombre= 'Francisco'
End Cose

Cada Case puede tener los siguientes valores:
·         Un valor
·         Una lista de valores separados por coma. (ej. 2, 4, 6, 8)
·         Una cláusula TO, desde hasta. (ej. 1 TO 30)
·         Una cláusula IS seguida por un operador relacional y un valor a comparar. (ej. IS>5)
·         Cualquier combinación de lo anterior, implícitamente indica un OR. (ej.1, 3, 5, 7, 9, 27 TO 33, IS >42)

Se refiere a la repetición de una(s) sentencia(s) que son definidas dentro de un bloque clarificado por una sentencia iterativa. Existen 2 clases de Flujos de control Iterativos.

FOR..NEXT..STEP
La sentencia ‘for’ permite repetir una(s) sentencia(s) un número definido anterior al comienzo de la ejecución de estas sentencias.
El tamaño, en líneas de código, del segmento 1, no tienen un limite.
Ejemplo:
for i= 1 to 23
j= i + ( j * 1.2 )
next
La variable ‘i’ se denomina "contador", el valor final de iteraciones no debe ser superior al rango definido para el tipo de dato del contador. Si el valor de ‘i’ es superior al valor final de iteración, las sentencias no se ejecutan.
Ejemplo:
For n = 5 to 25 step 5
a = a+10
Next

En este ejemplo la sentencia se ejecutara cuando n>=5 y n<=25, y el valor inicial de n (5) se incrementa en 5 por cada ejecución de las sentencias del bloque dentro de la sentencia for. El valor de Step puede ser negativo, en cuyo caso el valor inicial de la variable contador deberá ser inferior al valor final de la iteración.
 
DO..UNTIL | WHILE |LOOP
La sentencia ‘Do’ es utilizada para repetir una(s) sentencia(s) un número no muy definido de veces. El número de veces es casi siempre definido por la comparación de una variable o expresión condicional. Dentro de esta sentencia existen variantes, cuya única diferencia es el momento cuando se evalúa la expresión que condiciona la ejecución del bloque.

Ejemplo:
integer A = 1, B = 1 //Emite un pito por los parlantes hasta que la variable
DO UNTIL A > 15 // A sea mayor que 15.
Beep(A)
A = (A + 1) * B
LOOP

integer A = 1, B = 1 //Emite un pito por los parlantes mientras la variable
DO WHILE A <= 15 // A sea menor o igual a 15.
Beep(A)
A = (A + 1) * B
LOOP


Observación
En ambos tipos de iteraciones se puede terminar la ejecución del bloque utilizando la sentencia ‘Exit’.

Ejemplo:
integer A=1, B=1
DO WHILE A < 100
A = A+1
B = B+1
IF B > 3 THEN CONTINUE
MessageBox("Hola", "B es = " + String(B) )
LOOP

Ejemplo:
FOR contador = 1 to 10
IF vector1[Contador] = 0 THEN EXIT
NEXT
En ambos tipos de iteraciones se puede continuar la ejecución del bloque, desde el principio y no ejecutando las demás instrucciones del bloque.


Instrucciones para el control de los ciclos repetitivos

EXIT
Permite abandonar la ejecución de un bucle (For y Do Loop) ejecutando la siguiente instrucción después del bucle, es decir que el control pasa a la sentencia que va a continuación del Loop. Una sentencia Exit se puede utilizar en cualquier lugar de un bloque de sentencias          
       Ejemplo:
            Integer A = 1, C = 0
            Do While A < 20
                        If C > 15 Then  EXIT
                        C++
                        A++
            Loop
            A = 0               
            // La sentencia Exit pasa el control aquí
           
La sentencia Loop se ejecuta mientras el valor de A sea menor que 20. la sentencia IF del bloque de sentencias ejecuta una sentencia EXIT cuando el calor de C se hace mayor que 15. Esto provoca que finalice la sentencia LOOP y se pase el control a la sentencia que va a continuación de ella.

CONTINUE
 Cuando aparece una sentencia CONTINUE en una Do While Loop; el control pasa al Do While; las sentencias existentes entre CONTINUE y Loop no se ejecutan. En una estructura Do While Loop anidada, una sentencia CONTINUE sólo afecta a la estructura Do While Loop en la que se encuentra.
En resumen esta sentencia permite volver a ejecutar el bucle sin necesidad que se ejecuten todas las instrucciones que contiene.
La función MessageBox solo se muestra 2 veces
 
Int A = 1, B = 1
Do While A < 11
            A++
            B++
            If B > 3 Then Continue
            MessageBox(“Valores”, “A = “ + String(A) + “B= ” + String(B))
Loop

RETURN
La sentencia RETURN termina el script o función, devolviendo el control a quien lo llame. Si es un script de evento, RETURN generalmente devuelve el control a Power Builder. Si el script o función regresa un valor, la sentencia RETURN debe incluir el valor.
HALT
La sentencia HALT termina definitivamente la ejecución de una aplicación.
Sintaxis : HALT

GOTO
Cambia el control de una sentencia a otra donde se especifica una etiqueta..

Int A = 1
Do While A < 11
            A++
            If A =6 Then GOTO Mensaje
            MessageBox(“Valores”, “A = “ + String(A))
Loop

Mensaje:
            MessageBox(“Salida”, “A = “ + String(A))