La Utilidad de los Ciclos Infinitos

Este post está inspirado en el hilo de Quora ¿Es mala práctica el uso de bucles infinitos?

En nuestro proceso de aprendizaje de la programación es casi seguro que hayamos creado alguna vez un ciclo infinito, ya sea por fallas en el diseño de una solución o por errores de codificación. Wikipedia define bucle infinito como un error que consiste en realizar un ciclo que se repite de forma indefinida ya que su condición para finalizar nunca se cumple, e incluye ejemplos en varios lenguajes de programación que te sugiero ver. También te dejo este vídeo que explica de forma sencilla los ciclos infinitos usando C++:

Sin embargo, la definición de Wikipedia, hasta la fecha de publicación de este post, no es del todo cierta. No todos los ciclos infinitos son un error.

Por ejemplo, un bucle cuya condicional siempre sea verdadera (tal como while (1) o while (true)) no necesariamente es infinito. Es posible colocar al interior del bucle al menos una validación que permita ejecutar una instrucción break que lo rompa. Si en el condicional del ciclo se usa una variable boleana (por ejemplo while (Bandera)), bastará que en alguna parte del bucle se cambie el valor de dicha variable para romperlo. Esta última versión es preferible por ser una mejor práctica de programación, pues favorece la depuración, el mantenimiento y la legibilidad.

Usar expresiones aritméticas o lógicas que nunca se cumplan o nunca se alcancen al ejecutar el ciclo, por ejemplo while (i>0), es otra manera de crear ciclos infinitos, que pueden romperse al asignar un valor a i que haga falsa la condición.

Es en el descuido de no incluir, u olvidar, el mecanismo para romper el ciclo infinito donde se pierde el control de ejecución del programa, y donde puede decirse que se cometió un error.

(Lo antes mencionado para el while también aplica para el do-while, excepto que en éste último el bloque de instrucciones del cuerpo del bucle se ejecuta al menos una vez, y la condición se comprueba hasta el final del ciclo. Para el ciclo for sugiero veas los ejemplos del vídeo, pues tiene características propias y maneras particulares de volverse infinito.)

Existen dos situaciones en las cuales pueden emplearse los ciclos infinitos:

  1. Cuando el programa dependa de la entrada del usuario. Por ejemplo, los programas que esperan un valor numérico o literal específico desde el teclado, o el caracter o combinación de teclas de la opción para salir de un menú, y romper así el ciclo.

  2. Cuando el programa esté intencionalmente diseñado para ejecutarse indefinidamente. Por ejemplo, los programas que se ejecutan hasta que se apague el computador, tales como drivers de red, procesos propios del sistema operativo, programas que se inician con éste y deben residir en la RAM (ejemplo, antivirus o utilitarios) o programas embebidos.

En otras palabras, los ciclos infinitos no siempre son un error de programación. Bien usados, pueden ser poderosas herramientas de desarrollo.

Citando del hilo de Quora podemos también decir que:

Hay que tener cuidado al crear bucles con condicionales que no limitan su ejecución. La primera es asegurarse de que el bucle realmente deba ser infinito o que exista una condición interna que lo detenga. Es fácil olvidar incluir esta condición provocando un bucle infinito por error. La segunda es que si al interior del bucle no existen operaciones de I/O u operaciones que introduzcan demoras programadas, el bucle puede provocar uso excesivo de CPU.

No estoy de acuerdo con evitar el uso de estos bucles simplemente porque exista un riesgo de cometer errores. Un buen programador debe entender perfectamente cómo funciona el código para poder usarlo de manera segura. Evitar prácticas solamente porque alguien dice que son malas conduce a la mediocridad.

Los bucles infinitos tampoco son una mala práctica, a menos que sean exactamente lo que necesitas utilizar.

Por ejemplo, vamos a suponer que estás en una pantalla de selección. Ahí puedes tener un bucle infinito esperando a que el usuario elija una opción entre varias. En cambio si estás por ejemplo intentando escribir en un archivo, y no asumes que puede haber errores que impidan finalizar la tarea, entonces es una mala práctica.

Por último, recordar que en caso de necesitar usar ciclos infinitos de manera intencional, debemos cuidar los recursos de cómputo, pues un ciclo infinito sin control puede agotar rápidamente la RAM, disparar el uso del CPU al 100%, saturar el espacio de almacenamiento físico, etc., dependiendo de lo que ejecute internamente.


Espero que estos recursos te ayuden mucho en tu formación y crecimiento como programador como me ha ayudado a mí. Si sabes de otros temas que valga la pena incluir en este blog, házmelo saber. No olvides dejar tu comentario y compartir el post con quienes consideres que pueda serle útil. Si encuentras algún link roto o vídeo que no aparece, por favor avísame para corregirlo.

Comentarios