Saltar a contenido

Optimizando expresiones condicionales

¡Adopta el hábito de pensar en cómo mejorar tu código, siempre!

Siempre pregúntate:

  • ¿Podría mejorar mi código aún más, ser mejor?
  • ¿Podría optimizarlo de alguna manera?
  • ¿Podría ser más simple?
  • ¿Podría mejorar el diseño?
  • ¿Podría hacer menos preguntas para llegar a la solución?

Apuesto a que (casi) siempre se podría mejorar un código, aunque sea ligeramente.

Retomemos el código anterior:

comparar v4.py
x = int(input("¿Cuál es el valor de x? "))
y = int(input("¿Cuál es el valor de y? ")

if x < y or x > y:
    print("x es distinto de y")

else:
    print("x es igual a y")

¿Cómo podríamos mejorar este código?

El operador lógico !=

El operador lógico de desigualdad != (u operador de no igual) se utiliza para comparar si dos valores son diferentes, es decir, si no son iguales.

Si bien nuestro código es correcto, podemos mejorarlo aún más.

Robustecer la lógica de las expresiones condicionales es una buena práctica para optimizar nuestro código. Y esto nos permitiría simplificar nuestro código y hacerlo más eficiente.

¿Por qué perdemos el tiempo preguntando si es menor o mayor que? ¿No sería más eficiente preguntar si son diferentes?

En lugar de hacer dos preguntas separadas, x < y y x > y, podríamos hacer una sola pregunta que nos permita obtener el mismo resultado.

Si x no es igual a y, entonces x es distinto de y. Por lo tanto, podríamos combinar estas dos preguntas en una sola pregunta que nos permita obtener el mismo resultado.

Vamos a modificar nuestro código para implementar esta mejora:

comparar v5.py
x = int(input("¿Cuál es el valor de x? "))
y = int(input("¿Cuál es el valor de y? ")

if x != y:
    print("x es distinto de y")

else:
    print("x es igual a y")

Al hacer esta modificación, hemos simplificado nuestro código y lo hemos hecho más eficiente. Ahora, en lugar de hacer dos preguntas separadas, hacemos una sola pregunta que nos permite obtener el mismo resultado.

El diagrama de flujo de este código sería algo como esto:

Diagrama de flujo que compara la desigualdad entre dos números con el operador de desigualdad

Esta versión del programa, es aún más sencilla, quizás la más sencilla que hemos visto hasta ahora. Así como el código se está volviendo más compacto, con menos caracteres, también se están compactando los diagramas, capturando la simplificación relativa de cada uno de los programas.

Invirtiendo la lógica de las expresiones condicionales

Invertir la lógica de las expresiones condicionales

Nuestro programa funciona de igual manera si realizamos los ajustes correspondientes.

Invertir la lógica de una expresión condicional puede ser útil por varias razones, dependiendo del contexto en el que estés programando. Aquí te explico algunas de las razones más comunes:

Simplificar el Código:

Invertir la lógica de una condición puede simplificar el flujo del código, haciéndolo más fácil de leer y entender. Por ejemplo, si una condición es más fácil de expresar en su forma negativa, invertirla puede reducir la complejidad del código.

Antes
if not (a > b):
    # hacer algo
Después
if a <= b:
    # hacer algo

En este caso, la condición es más directa y fácil de leer después de invertir la lógica.

Evitar Condiciones Negativas:

Las condiciones negativas pueden ser difíciles de entender rápidamente. Al invertir la lógica, puedes reformular una condición para que sea positiva y más intuitiva.

Antes
if not found:
    print("No se encontró el elemento")
Después
if found:
    print("Se encontró el elemento")
else:
    print("No se encontró el elemento")

Optimizar el Flujo del Programa:

Invertir una condición puede ayudarte a manejar mejor los casos comunes y excepcionales. Por ejemplo, si una condición rara vez se cumple, podrías manejar primero el caso general y luego las excepciones, lo que puede mejorar el rendimiento.

Antes
if condition:
    # código para la condición
else:
    # código por defecto
Después
if not condition:
    # código por defecto
else:
    # código para la condición

Preparar para Futuras Expansiones:

Invertir la lógica puede facilitar la adición de nuevas condiciones o comportamientos en el futuro. Al estructurar el código de manera que las condiciones negativas se manejen primero, puedes mantener el código más organizado cuando se necesite añadir lógica adicional.

Seguir Convenciones de Código:

Algunas organizaciones o equipos tienen convenciones de código que prefieren condiciones positivas o negativas en ciertas situaciones. Invertir la lógica puede ayudarte a cumplir con estas prácticas recomendadas.

Antes (condición negativa)
if not is_admin:
    print("Acceso denegado")
Después (Invirtiendo la lógica)
if is_admin:
    print("Acceso concedido")
else:
    print("Acceso denegado")

¡Para recordar!

Invertir la lógica de una expresión condicional puede mejorar la claridad, el mantenimiento y el rendimiento del código, además de hacer que tus expresiones lógicas sean más explícitas.