BookinglyTech News
Software

El PHP UI Builder resuelve con recursión un árbol de componentes y reabre el debate

Nick Cosentino dijo en X que nunca usó recursión en veinte años; un desarrollador le responde con una biblioteca PHP donde sí funciona.

2 min de lecturaDev.to0 vistas

Nick Cosentino, @DevLeaderCa en X, publicó en octubre de 2025 que en más de veinte años de programación nunca había usado recursión y que convertir el código a un bucle iterativo casi siempre resulta más legible y más fácil de depurar. El mensaje se llevó más de 460 respuestas. Un desarrollador ha contestado con un caso concreto: la biblioteca PHP UI Builder, donde, defiende, la recursión sale más simple que su alternativa iterativa.

La pieza arranca con el ejemplo de manual, la sucesión de Fibonacci: la versión recursiva no necesita bucles ni variables intermedias, la iterativa sí. De ahí saca la regla que guía todo el texto: la recursión compensa cuando el algoritmo se puede definir con una expresión sencilla que depende de sí misma. Con un grafo en lugar de un árbol, avisa, el cálculo ya no encaja igual.

Componentes virtuales

UI Builder construye interfaces a partir de componentes definidos según un framework CSS, sea Bootstrap, Bulma o Tailwind. Expone una API común que declara los componentes, y bibliotecas especializadas generan el HTML para cada framework.

La estructura es jerárquica: un componente tiene propiedades y puede contener otros componentes, con sus propias propiedades, que a su vez contienen más. Es un árbol.

Para construir interfaces a partir de datos, la biblioteca añade los componentes virtuales. No producen HTML directamente: toman datos y devuelven cero o más componentes, que pueden ser reales o virtuales. Hay cuatro. When genera un componente si se cumple una condición. Each genera uno por cada elemento de un array. Pick elige un componente según la primera condición que sea verdadera. List agrupa cualquier conjunto de componentes en uno solo.

Dos funciones recursivas

El proceso se apoya en dos funciones que se llaman a sí mismas. expand() recorre un componente virtual y devuelve la lista de componentes reales que genera, iterando mientras aparezcan virtuales por el camino. build() es el punto de entrada: llama primero a expand() y, una vez tiene una lista solo de componentes reales, se ejecuta de forma recursiva sobre cada hijo. El resultado acaba en la clase Scope. Según el autor, expand() ocupa 15 líneas y build() 40; las cifras son suyas.

El argumento de fondo es que la recursión no es un adorno de libro de texto. Cuando los datos forman un árbol, la versión recursiva describe la estructura tal cual, y la iterativa obliga a mantener una pila a mano. El debate en X iba de gustos y de experiencia; este caso solo añade un ejemplo donde la elección se decide mirando la forma del problema.