Regístrate para acceder a más de 15 cursos gratuitos de programación con un simulador

Determinismo Funciones y lógica en Python

En el mundo de la programación, las funciones tienen propiedades que nos ayudan a entender cómo funcionan y en qué situaciones usarlas. Una de estas propiedades es la determinación, y hoy exploraremos su impacto en nuestros programas.

Una pregunta interesante...

🤔 ¿Alguna vez te has preguntado si una función siempre devuelve el mismo resultado con los mismos valores de entrada?

Algunas funciones lo hacen, mientras que otras pueden darnos resultados diferentes cada vez que las usamos. Veamos en detalle.


Funciones deterministas: siempre predecibles

La función determinista siempre devuelve el mismo resultado cuando recibe los mismos valores de entrada. No importa cuántas veces la llames, si los parámetros son los mismos, el resultado será idéntico.

Un buen ejemplo es la función len() en Python, que nos dice cuántos caracteres tiene un texto:

len('códica')  # 6
len('códica')  # 6

len('wow')  # 3
len('wow')  # 3

Si llamas len('códica'), el resultado siempre será `6. Puedes probarlo una y otra vez, y la respuesta no cambiará.

Esto hace que las funciones deterministas sean predecibles y confiables, lo que facilita su uso en programación.

💡 Las funciones deterministas son ideales para cálculos matemáticos, validaciones y procesos donde es fundamental obtener siempre la misma respuesta.

Pero no todas las funciones son así...

Deterministic


Funciones no deterministas: ¿quién sabe qué pasará?

Las funciones no deterministas pueden devolver resultados diferentes incluso si reciben los mismos valores de entrada.

Pensemos en una función que genere un número aleatorio. En Python, podemos hacerlo con random() así:

# No te preocupes si no entiendes esta sintaxis aún, la aprenderás más adelante.
from random import random  

# Generamos un número aleatorio
random()  # 0.34215687901132
random()  # 0.89122356190267

Cada vez que llamamos a random(), obtenemos un número diferente. No hay garantía de que el resultado sea el mismo en cada ejecución.

Otro ejemplo común de función no determinista es obtener la fecha y hora actuales. Siempre cambia con el tiempo.

from datetime import datetime  

# Obtenemos la hora exacta en que se ejecuta esta línea  
datetime.now()  # 2024-06-05 14:30:12.125485  
datetime.now()  # 2024-06-05 14:30:14.678923  

Ambas funciones (random() y datetime.now()) pueden devolver resultados distintos en cada ejecución, por lo que son no deterministas.

👉 Si una función puede dar un resultado diferente en alguna de sus ejecuciones, no es determinista.

Efectos secundarios: cuando una función cambia algo más

Hasta ahora, hemos hablado de funciones que toman valores de entrada y devuelven un resultado predecible o no predecible.

Pero en la práctica, muchas funciones no solo devuelven un resultado, sino que también cambian algo en el sistema. A esto se le llama efecto secundario.

Por ejemplo, la función print() en Python:

print("¡Hola, mundo!")  

Aquí print() no nos devuelve un valor que podamos usar en el código, pero sí muestra texto en la pantalla, lo cual es un cambio visible.

Otros ejemplos de funciones con efectos secundarios:

Acción Función en Python
Escribir en un archivo open().write()
Modificar una variable global global var_name
Enviar datos por internet requests.post()

Las funciones con efectos secundarios pueden hacer que el código sea más difícil de probar y depurar, porque cada vez que se ejecutan pueden cambiar el estado de algo en el programa o incluso fuera de él (como archivos o bases de datos).

⚠️ Sin embargo, también son necesarias. Sin efectos secundarios, un programa no podría imprimir, guardar datos o interactuar con el usuario.

Resumen

  • Las funciones deterministas siempre devuelven el mismo resultado con los mismos valores de entrada. Son más fáciles de predecir y probar.
  • Las funciones no deterministas pueden dar resultados diferentes cada vez que se llaman, como las que generan números aleatorios o la hora actual.
  • Los efectos secundarios ocurren cuando una función cambia algo más allá de su propio resultado, como imprimir en pantalla, modificar archivos o hacer peticiones a internet.

Saber distinguir entre estos tipos de funciones te ayudará a escribir código más confiable y fácil de entender.


Materiales adicionales

  1. Efecto secundario 📚 Wikipedia

Para acceder completo a curso necesitas un plan básico

El plan básico te dará acceso completo a todos los cursos, ejercicios y lecciones de Códica, proyectos y acceso de por vida a la teoría de las lecciones completadas. La suscripción se puede cancelar en cualquier momento.

Obtener acceso
130
cursos
1000
ejercicios
2000+
horas de teoría
3200
test

Obtén acceso

Cursos de programación para principiantes y desarrolladores experimentados. Comienza tu aprendizaje de forma gratuita

  • 130 cursos, 2000+ horas de teoría
  • 1000 ejercicios prácticos en el navegador
  • 360 000 estudiantes
Al enviar el formulario, aceptas el «Política de privacidad» y los términos de la «Oferta», y también aceptas los «Términos y condiciones de uso»

Nuestros graduados trabajan en empresas como:

Bookmate
Health Samurai
Dualboot
ABBYY