# El bucle

- Sitio: Ikusmira — enciclopedia en castellano de ciencias sociales y humanidades
- URL canónica: https://ikusmira.org/p/el-bucle/
- Categoría: Informática
- Publicado: 2024-06-13
- Autoría: Josemari Sarasola Ledesma — Editor coordinador; Profesor titular de escuela universitaria, Universidad del País Vasco/Euskal Herriko Unibertsitatea
- Perfiles del autor: https://ekoizpen-zientifikoa.ehu.eus/investigadores/127490/detalle, https://dialnet.unirioja.es/servlet/autor?codigo=333202
- Política editorial (autoría, revisión, correcciones, financiación): https://ikusmira.org/politica-editorial/

Un **bucle** es la instrucción que ordena a la máquina repetir un trozo de programa cambiando en cada vuelta lo que cambia. Toda repetición útil tiene tres partes: una preparación, que pone el contador en su primer valor; una condición, que decide si toca otra vuelta o ya no; y un paso, que mueve el contador antes de volver a empezar. Lo que hace útil a la repetición es precisamente ese contador: la vuelta número *i* dispone del número *i* y puede hacer con él algo que las vueltas anteriores no hicieron, plantar la flor en la posición *i*, sumar el número *i*, mirar la casilla *i*. Repetir sin ese índice sería hacer muchas veces exactamente lo mismo, que es lo que hace una máquina de coser, no lo que hace un programa.

El programa de la figura cabe en tres líneas:

```
para i desde 1 hasta n
    planta una flor en la posición i
fin para
```

El deslizador fija *n* entre 1 y 12. El botón «Un paso» ejecuta una vuelta: resalta la línea que toca, dibuja la flor *i*-ésima en su posición y actualiza las cuentas; «Ejecutar» encadena las vueltas hasta terminar (y mientras corre se llama «Pausa»). Debajo del listado, dos barras mantienen la comparación que importa: «líneas del bucle: 3» frente a «líneas a mano: *n*», y la segunda crece cada vez que se mueve el deslizador. La lectura final lo resume: «12 flores con 3 líneas; escritas a mano serían 12 líneas».



Aquí está el salto que convierte una lista de órdenes en otra cosa. Un programa sin bucles de cien líneas hace como mucho cien cosas; el de la figura, con tres, hace *n* cosas, y *n* puede ser doce hoy y un millón mañana sin que nadie toque el código. El programa deja de crecer cuando crece el trabajo. Más aún: *n* puede no conocerse al escribir, porque lo trae un fichero, lo teclea un usuario o lo mide un sensor, y el mismo texto sirve para todos los casos. Ese es el punto exacto en que un programa deja de ser una lista y empieza a ser una máquina: una pieza fija que produce resultados distintos según lo que se le eche.

La idea es más vieja que los ordenadores. En 1843, traduciendo un artículo de Menabrea sobre la Máquina Analítica de Babbage, Ada Lovelace añadió unas notas que triplicaban el texto original; en la nota G organizó el cálculo de los números de Bernoulli como una operación que se repite con índices que cambian, y explicó que la máquina haría retroceder su juego de tarjetas perforadas para ejecutar de nuevo la misma secuencia: un bucle de cartón, un siglo antes de que existiera algo capaz de ejecutarlo. Cuando por fin hubo máquinas, la repetición tardó poco en vestirse de instrucción: FORTRAN, en 1957, la llamó `DO` y fijó la forma canónica (preparación, condición, paso) que casi todos los lenguajes posteriores copiaron con otro nombre. Donald Knuth, en el primer volumen de *The Art of Computer Programming* (1968), dio a los bucles su herramienta de razonamiento, el invariante: aquello que no cambia en ninguna vuelta y que permite demostrar qué habrá cambiado al final, idea que Dijkstra convirtió después en el centro de su método.

El bucle tiene una enemiga doméstica: la vuelta de más o de menos. ¿Hasta *n* o hasta *n* − 1? ¿Empezando en 0 o en 1? La diferencia es una sola vuelta y, sin embargo, es la diferencia entre doce flores y once, entre sumar bien y sumar mal. Es el error más común de la programación real, tan común que tiene nombre propio en inglés (*off by one*) y se merece un examen detenido que llegará en el capítulo dedicado a la depuración. Baste aquí la advertencia: al escribir un bucle, la pregunta no es «¿cuántas veces quiero repetir?» sino «¿qué vale *i* en la primera vuelta y qué vale en la última?», y las dos respuestas conviene comprobarlas con las manos antes de fiarse de la cabeza.

Fíjese, mientras tanto, en lo que el programa de la figura no puede hacer: plantar once flores y saltarse la séptima, o parar antes si se acaba el agua. Una máquina que solo repite hace siempre lo mismo el mismo número de veces. Para que cada vuelta pueda elegir qué hacer hace falta una instrucción nueva, y es la del siguiente capítulo: la condición.

## Fuentes

- Augusta Ada King, condesa de Lovelace — *Notes to L. F. Menabrea, Sketch of the Analytical Engine invented by Charles Babbage*, Taylor's Scientific Memoirs 3, Londres (1843)
- Charles Babbage — *Passages from the Life of a Philosopher*, Longman, Green, Longman, Roberts & Green, Londres (1864)
- John W. Backus et al. — *The FORTRAN Automatic Coding System*, Proceedings of the Western Joint Computer Conference (1957)
- Donald E. Knuth — *The Art of Computer Programming, vol. 1: Fundamental Algorithms*, Addison-Wesley, Reading (Massachusetts) (1968)
- Edsger W. Dijkstra — *A Discipline of Programming*, Prentice-Hall, Englewood Cliffs (Nueva Jersey) (1976)

---

Cómo citar: Sarasola, Josemari (2024). «El bucle». Ikusmira. https://ikusmira.org/p/el-bucle/
Índice del sitio para modelos: https://ikusmira.org/llms.txt
