- Una pregunta interesante...
- Funciones deterministas: siempre predecibles
- Funciones no deterministas: ¿quién sabe qué pasará?
- Efectos secundarios: cuando una función cambia algo más
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
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.
Pero no todas las funciones son así...
Funciones no deterministas: ¿quién sabe qué pasará?
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.
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.
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).
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
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.