programacion-anidacion-condicionales

Anidación de condicionales

La anidación de condicionales es una técnica que nos permite estructurar la lógica de decisión de un programa en múltiples niveles.

Básicamente al anidar condicionales, metemos un condicional dentro de otro condicional. Por supuesto, podemos meterlos tanto en el IF como en el ELSE.

De esta forma, en lugar de tener una sola condición seguida de una única instrucción, podemos evaluar condiciones adicionales dentro de bloques condicionales anidados.

programacion-condicional-nested

Esquema IF anidado

Que traspasado a código, tendría la siguiente pinta:

if(condicion1) // condicional externo
{
    if(condicion2) // condicional interno
	{	    
	}
	else
	{
	}
}
else
{
}

Por supuesto podríamos meter el condicional interno tanto en el bloque IF como en el ELSE. Incluso podríamos mucho más, y meter más condicionales anidados dentro de los anidados, y más dentro de los anidados… hasta acabar con un lío que no entienda nadie 😉.

Ejemplos de anidación de condicionales en diferentes lenguajes

Vamos a verlo más fácil si vemos un ejemplo en diferentes lenguajes de programación.

En estos lenguajes, que heredan la sintaxis de C, la anidación de componentes quedaría algo así.

if (condicion1)
{
    if (condicion2)
    {
        // Acción si ambas condiciones son verdaderas
    }
    else
    {
        // Acción si la condición2 es falsa
    }
}
else
{
    // Acción si la condición1 es falsa
}

Que sería muy similar al caso de Python, simplemente teniendo en cuenta la diferencia de sintaxis al hacer el condicional.

if condicion1:
    if condicion2:
        # Acción si ambas condiciones son verdaderas
    else:
        # Acción si la condición2 es falsa
else:
    # Acción si la condición1 es falsa

En todos estos casos

  • Si se cumple condicion1 se ejecutaría el bloque el condicional interno.
    • Si se cumple condicion2 se ejecutaría el bloque IF del condicional interno.
    • Si no se cumple condicion2 se ejecución del bloque ELSE del condicional interno.
  • Si no se cumple condicion1 se ejecutaría el bloque ELSE del condicional externo.

Consejos de limpieza Consejos

La anidación de condicionales es una práctica muy habitual. La vais a usar frecuentemente y, en si misma, no tiene porqué ser algo malo.

Sin embargo, la anidación de condicionales siempre introduce un grado de complejidad a la hora de leer e interpretar el código.

Por ejemplo, supongamos el siguiente código. Interpretar este código “me obliga a pensar demasiado”. Pensar está bien, pero si estás buscando un error, o leyendo el código de otro, o es jueves y llevas 8 horas al día revisando código… cuanto más fácil me lo pongas, mejor.

if (isValidUser)
{
    if (hasPreviusLog)
    {
        // isValidUser y hasPreviusLog
    }
    else
    {
        // isValidUser y NO hasPreviusLog
    }
}
else
{
    // No isValidUser
}

Con la anidación de condicionales “tengo que pensar” en que condiciones acabo ejecutando cada bloque de código.

Por ejemplo, el código anterior es equivalente al siguiente, que es mucho más fácil de leer e interpretar.

if (isValidUser && hasPreviusLog)
{
}

if (isValidUser && hasPreviusLog == false)
{
}

if (isValidUser == false)
{
}

Es un ejemplo muy sencillo. Imaginad el pequeño infierno que se puede montar cuando alguien hace un fragmento de código con un condicional, dentro de un condicional, dentro de un condicional.

Es muy importante, evitar la anidación excesiva ya que puede dificultar la comprensión del código. Si es condicional se complica demasiado, plantéate otras alternativas, como emplear operadores lógicos como AND (&&) y OR (||) para combinar condiciones.

También es importante considerar que la anidación es mucho menos intuitiva en los bloques ELSE. Eso es así porque la lógica negada siempre es mucho más difícil de procesar mentalmente, que la lógica positiva.

En definitiva, tened siempre presente la claridad de vuestro código y mantén la estructura de los bloques de código de manera clara y legible.