Los bucles recursivos

Los bucles recursivos son una función muy potente para manejar la paginación de la interfaz. Su programación es particularmente sencilla; pero su utilización requiere un buen dominio lógico del encadenamiento de los bucles.

La llamada a un bucle recursivo es muy simple. Basta con indicar el nombre de otro bucle como TIPO de bucle:

<BOUCLEn(bouclex)></BOUCLEn>

No hay ningún criterio: el bucle n corresponde pura y simplemente a una copia del bucle x. La totalidad del bucle funciona como si se hubiera vuelto a copiar íntegramente el bucle x (todas las balizas y bucles SPIP, el código HTML, al igual que los textos condicionales antes, después, y el texto alternativo) en el lugar donde se presenta el bucle n. Es necesario, sin embargo, que el bucle x preceda al bucle n.

La utilización más simple consiste en «duplicar» un bucle sin tener que volver a copiarlo. Así, también, cualquier modificación del bucle original x repercute en la copia n.

Pero el interés y la funcionalidad adicional aparecen en realidad cuando se pone el segundo bucle, n, dentro del primero, x. Se obtiene asi un comportamiento recursivo: el bucle x contiene un bucle n, que a su vez reproduce el bucle x, que contiene el boucle n, y así sucesivamente, hasta que el bucle x ya no dé ningún resultado.

Un excelente ejemplo de lo que es la recursividad se encuentra en los foros: uno puede responder a un artículo, pero luego también se puede responder a esa respuesta, y nuevamente a la respuesta a la respuesta, y a la respuesta a la respuesta a la respuesta, y así recursivamente.

¿Cómo hacer un esqueleto que muestre y ordene toda la discusión en un foro? Con lo que vimos hasta aquí, habría que limitarse a cierto nivel de respuestas. Quizás sería sano, pero bien se sabe que es difícil decir de antemano cuándo va a parar una discusión...

La solución es un bucle recursivo, es decir un bucle que se llama a si mismo. Para el caso de los foros, he aquí un ejemplo que muestra, en listas incluidas, el titulo de todas las respuestas, sea cual sea el nivel de discusión. Es muy sencillo: un primer bucle «fabrica» la entrada de los hilos (threads, los mensajes que responden a un artículo directamente), un segundo bucle muestra las respuestas a estos mensajes, y un bucle recursivo causa la recursividad de este segundo bucle:

<BOUCLE_foro(FORUMS){id_article}>
    <p>#TITRE</p>
    <B_repuestas>
    <UL>
    <BOUCLE_repuestas(FORUMS){id_parent}>
        <LI>#TITRE
        <BOUCLE_recursivo(boucle_respuestas)>
        </BOUCLE_recursivo>
    </BOUCLE_repuestas>
    </UL>
    </B_repuestas>
</BOUCLE_foro>

El BOUCLE_recursivo es remplazado por el BOUCLE_repuestas que lo contiene, mientras haya resultados en el bucle, es decir mientras haya respuestas.

Así, en pocas líneas, se puede lograr que se muestre la totalidad de la estructura (secciones, subsecciones...) del sitio.

Autor o autora dani Publicado el: Actualizado: 21/03/23

Traducciones: عربي, català, Deutsch, English, Español, français, italiano, Nederlands