Bienvenidos a Iseries Venezuela

Las mejores prácticas, recursos, tips, enlaces, videos y artículos para informáticos relacionados con el Iseries y el As/400 lenguajes de programación RPG, ILE RPG y SQL.

The best practices, resources, tips, links, videoes and articles for computer related to the Iseries and the As/400 languages of programming RPG, ILE RPG and SQL.

Monday, March 25, 2013

Ruptura de Control en la Programación Estructurada











 
Los desarrolladores más ortodoxos se aferran vehementemente al uso estricto de Estructuras  de Control para asegurarse de que los desarrollos sean realizados cumpliendo las normas de la programación Estructurada. Estos desarrolladores vivieron una época muy ardua en la que mantener un programa al día y realizarle cambios continuos, en una programación carente de estructura era un verdadero tormento. Había programas que requerían más de 150 páginas de desarrollo. Las compilaciones podían llegar a las 350 páginas y el seguimiento del código fuente en cuanto a la lógica empleada era tan complicado como descifrar un mensaje de las tropas enemigas en plena guerra.
Hay gente que no pueden escuchar la palabra: GOTO porque enseguida sacan la estaca y la cruz para liberarse de tan horrendo maleficio.
En la época de la programación no estructurada, el uso del GOTO procuraba cubrir la ausencia de estructuras de control que hicieran posible generar operaciones cíclicas y repetitivas en la lógica del programa. Aparecieron, afortunadamente, las siguientes sentencias:

Dow: Do while  (ejecute mientras se cumpla la  condición)
Dou: repeat  (ejecute hasta que se cumpla la condición)
For: (con los valores de iteración desde … hasta ejecute)
El select los if anidados y el Case se convirtieron en grandes aliados del programador que le permitieron desarrollar códigos más entendibles para sus colegas y para ellos mismos a lo largo del tiempo.
Para pesar de algunos,  los siguientes códigos de operación han logrado “colarse” y romper el esquema rígido que tanto alivio ocasiona a muchos desarrolladores, provocando reacciones encontradas de amor-odio entre las viejas y nuevas tendencias de programación.

                    Iter, Leave, Leavesr, GOTO

 
La idea de este artículo no es provocar una discusión infinita entre los desarrolladores sino ilustrar el uso beneficioso que puede darse a sentencias que pueden verse como peligrosas pero que no lo son tanto. 






ITER

Este código ha sido particularmente útil cuando estamos validando los campos de una pantalla en una rutina y nos topamos con que uno de ellos tiene un valor errado y queremos detener el proceso en ese momento e informar al usuario con un mensaje en pantalla que debe corregir el error

Mientras no salir;

      Mostrar pantalla;
      Si campo 1 en error;
       mostrar mensaje 1;
      iter;
     Endif

      Si campo 2 en error;
      Mostrar  mensaje 2;
       Iter;
     Endif;

Fin del lazo;

Si tuviésemos 20 campos que validar, por ejemplo, habría que esperar la validación de los siguientes 19 campos para dar el mensaje de error. Esto ocasionaría una demora en el tiempo de respuesta al usuario y un retraso acumulativo en la carga de datos.
Iter permite regresar al principio del lazo (mientras no salir) y mostrar, al usuario, la pantalla con el error.
Este ejemplo es válido si quiere mostrarse cada mensaje de error uno a uno. En lo personal prefiero resaltar los campos con errores todos de una vez para que el usuario corrija en el menor número posible de “pantallazos” los errores y pierda menos tiempo en la carga. Particularmente coloco un error genérico:       "Revise los campos resaltados. Hay Datos no válidos o erróneos".
Hay instalaciones que tienen en sus estándares de desarrollo la validación de uno a uno de los campos, informando al usuario el error en cada revisión.

LEAVE

Este código de operación se utiliza cuando queremos salir del lazo instantamente. Esto puede simplificar el agregar IF para bloquar la ejecución de las siguientes instrucciones del lazo. Ayuda a realizar la programación en forma mas simple:
 
Mientras no salir;

     Mostrar pantalla;
      Si F03 Leave;

      Si campo 1 en error;
       mostrar mensaje 1;
      Endif;

     Si campo 2 en error
      Mostrar mensaje 2;
     Endif;

Fin del lazo;
El programa abandona el lazo automaticamente cuando el usuario presiona F3.
En la manera tradicional habria que colocar un IF not F03
antes de: Si campo 1 en error, y cerrar ese IF al final de todas las validaciones.
En mi opinión es visualmente mas limpio el código y ahorra tiempo de respuesta.

LEAVESR

Este código es muy parecido al LEAVE pero en lugar de salir de un lazo de repetición permite programar en forma automática el abandono de una rutina, en cualquier momento que lo desees.
 
 
Tambien es utilizado en los procesos de validación al detectar algun error. Luego de realizar las operaciones que correspondan (encender indicadores, etc) y antes de seguir validando otros campos de pantalla se coloca LEAVESR para salir de la rutina y regresar al punto donde se muestra la pantalla al usuario.

Finalmente el tan aterrador: 

 

GOTO

Dados los antecedentes penales que tiene este código de operación es recomendable utilizarlo con discreción. Aunque algunos lo descartan completamente, otros recomiendan que utilizarlo "hacia abajo" siempre. Es decir la instrucción a la que se hace referencia en el goto es posterior en secuencia y en número de línea a la instrucción donde se encuentra el GOTO.
 
 
 
Una funcionalidad inofensiva del GOTO es parecida a la del LEAVESR. Colocando una etiqueta en la línea donde está el ENDSR, puede hacerse un GOTO hacia esa etiqueta en la rutina de validación cuando se detecta un campo con error de validación, provocando de esta manera la finalización de la rutina.
 
En programas extremadamente largos y complejos, el GOTO puede ser una excepcional tabla de salvación con un uso racional y supervisado por el grupo de desarrollo de la organización.



Si te pareció interesante, reenvíalo a un amigo haciendo click en el sobrecito que está al final del artículo. El conocimiento es valioso, compártelo.


Autor: Ing. Liliana Suárez

No comments: