La condición

La condición convierte una lista fija de órdenes en una decisión de sí o no. Cómo funcionan if y else, de George Boole a Böhm y Jacopini.

4 min
Editar

La condición es la instrucción que convierte una ruta fija en una decisión: «si esto se cumple, haz aquello; si no, haz lo otro». Hasta ella, un programa era una lista que se ejecutaba entera, siempre igual, de la primera línea a la última. Con ella, la ejecución llega a un punto, hace una pregunta, y según la respuesta toma un camino u otro. La pregunta tiene una restricción que lo cambia todo: solo admite dos respuestas, sí o no. Es el bit del primer capítulo vuelto a aparecer: en el fondo de cada decisión que toma un programa hay una pregunta cuya respuesta cabe en un solo bit.

La figura de esta página dibuja una norma completa como árbol de decisiones. La norma de la piscina dice que los menores de doce años solo entran acompañados de un adulto, y eso son dos preguntas encadenadas: «¿edad ≥ 12?» y, solo si la primera sale que no, «¿acompañado?». Escrita como programa:

si edad ≥ 12
    entra solo
si no
    si acompañado
        entra con un adulto
    si no
        no entra
    fin si
fin si

Los tres resultados posibles (entra solo, entra con un adulto, no entra) cuelgan de las ramas. Mueve el deslizador de edad y marca o desmarca la casilla de acompañamiento: el camino por el árbol se ilumina en el momento, cada pregunta muestra su respuesta actual y el resultado final se enciende. Debajo de cada resultado, un contador recuerda cuántas de las veintiséis combinaciones de entrada terminan en él.

Interactivo Cruza el deslizador por el doce y verás el camino saltar de rama; marca y desmarca «acompañado» con un menor de doce para ver la segunda pregunta decidir. Las combinaciones de cada resultado están contadas.

Fíjate en lo que el árbol hace visible y la frase escrita oculta: la segunda pregunta solo se hace cuando la primera sale que no. Un niño de catorce años no es evaluado sobre acompañamiento; su caso se resolvió en el primer rombo. Las condiciones anidadas no son dos preguntas sino una pregunta y, en una de sus ramas, otra pregunta. Esa asimetría es exactamente lo que hace difícil leer código con muchas condiciones dentro de condiciones: cada «si» duplica el número de caminos posibles, y a los cuatro o cinco niveles ya hay más caminos de los que una cabeza puede recorrer. De ahí el oficio de quien programa: dibujar el árbol, aunque sea mentalmente, antes de escribir las líneas.

Que la pregunta sea de sí o no no es un capricho de los lenguajes, es su fundamento físico. George Boole mostró en 1854, en An Investigation of the Laws of Thought, que toda la lógica de las clases podía escribirse como un álgebra de dos valores, verdadero y falso, con tres operaciones. Cuando un siglo después las máquinas se construyeron con interruptores de dos estados, el álgebra de Boole era la descripción matemática exacta de lo que los circuitos hacían, y la condición de un programa es hoy literalmente eso: un bit calculado que decide por dónde sigue la ejecución. Ada Lovelace ya había imaginado la posibilidad en sus notas a la máquina de Babbage, en 1843: una máquina que pudiera variar su conducta según el resultado de sus propios cálculos dejaría de ser una calculadora para convertirse en otra cosa.

Hay una pieza más en el dibujo que merece atención: el «si no». No dice «si no, haz tal cosa concreta»; dice «si no, todo lo demás». El else es la rama de los casos que nadie enumeró, y por eso es donde viven los errores y los agravios: la norma que premia a quien tiene veinticinco años y carnet, y en el «si no» mete al de sesenta y cinco que nunca tuvo carnet, al menor acompañado y al que rellena mal el formulario. En 1966, Corrado Böhm y Giuseppe Jacopini demostraron que secuencia, condición y bucle bastan para escribir cualquier programa, y Edsger Dijkstra llevó la consecuencia a la práctica dos años después con su carta contra el salto incondicional: si el programa son estos tres ladrillos, se puede razonar sobre él pieza a pieza. La condición es el más delicado de los tres, porque es el único que decide. Un programa que solo repite hará siempre lo mismo con todos; uno que decide puede tratar distinto a cada caso, y conviene que lo haga por las razones escritas en las preguntas, no por accidente en la rama del «si no».

Un programa lleno de decisiones acaba repitiendo sus reglas: la misma comprobación escrita en doce sitios, cada copia esperando el día en que alguien corrija once. De eso trata el siguiente capítulo: la función, o cómo darle nombre a una regla para escribirla una sola vez.

§

Fuentes

  1. George BooleAn Investigation of the Laws of ThoughtWalton and Maberly, Londres1854
  2. Corrado Böhm y Giuseppe JacopiniFlow Diagrams, Turing Machines and Languages with Only Two Formation RulesCommunications of the ACM 9(5)1966
  3. Edsger W. DijkstraGo To Statement Considered HarmfulCommunications of the ACM 11(3)1968
  4. Luigi Federico Menabrea, con notas de Ada LovelaceSketch of the Analytical Engine Invented by Charles BabbageBibliothèque Universelle de Genève 82 (traducción y notas, 1843)1842
Sarasola, Josemari (2025). "La condición". Ikusmira. Recuperado de https://ikusmira.org/p/la-condicion/

Una errata, un dato desfasado, un párrafo que falta: edítalo y la redacción revisa tu propuesta.

Sugerir una mejora →
Informática La condición