Funciones
¿Qué son las funciones?
Una función, en términos simples, es un bloque de código que se ejecuta sólo cuando es llamado. Puedes pensar en ella como un pequeño programa dentro de tu programa principal, diseñado para realizar una tarea específica1. Una función también puede verse como una caja negra: le pasamos una entrada (parámetros), ocurre algún procesamiento interno, y produce una salida (retorno).
Las funciones nos permiten segmentar nuestro código en partes lógicas, donde cada parte realiza una única acción. Esto brinda varios beneficios2:
- Reutilización: Una vez definida la función, podemos ejecutar (llamar) ese código desde cualquier lugar de nuestro programa cuantas veces sea necesario.
- Organización: Permite dividir un programa grande en partes más pequeñas y manejables.
- Encapsulamiento: Las funciones reducen la complejidad escondiendo los detalles de implementación internos.
- Mantenimiento: Si necesitamos realizar cambios, solo debemos modificar el código en un lugar (la función) en lugar de rastrear todas las instancias de ese código.
Procedimientos vs. Funciones
Es vital distinguir entre estos dos conceptos. Mientras que una función siempre devuelve un valor, un procedimiento realiza una tarea pero no devuelve nada. En algunos lenguajes, esta diferencia es más clara que en otros. Python, por ejemplo, tiene funciones que pueden o no devolver valores.
Anatomía de una función
En Python, una función se declara usando la palabra clave def
, seguida del nombre de la función y paréntesis. El código dentro de la función se denomina el cuerpo de la función3 y contiene el conjunto de instrucciones a ejecutar para cumplir con su tarea..
def mi_funcion():
print("¡Hola desde mi función!")
Para llamar o invocar una función, simplemente usamos su nombre seguido de paréntesis:
mi_funcion() # Salida: ¡Hola desde mi función!
Parámetros y argumentos
Las funciones se vuelven aún más poderosas cuando les pasamos información, conocida como parámetros. Estos actúan como “variables” dentro de la función y permiten que la función trabaje con diferentes datos cada vez que se llama.
Mientras que los parámetros son variables definidas en la definición de la función. Los argumentos son los valores reales pasados al llamar a la función.
def saludo(nombre):
print(f"¡Hola {nombre}!")
saludo("María")
# Salida:
# ¡Hola María!
Podemos definir valores por defecto para los parámetros Python permite parámetros por defecto, que tienen un valor predeterminado, lo cual hace opcional pasar esos argumentos al llamar la función. También permite parámetros nombrados que permiten pasar los argumentos en cualquier orden, especificando su nombre.
def saludo(nombre="María", repeticiones=3):
repeticion = 1
while repeticion <= repeticiones:
print(f"¡Hola {nombre}!")
repeticion += 1
saludo()
# Salida:
# ¡Hola María!
# ¡Hola María!
# ¡Hola María!
saludo("Florencia", 4)
# Salida:
# ¡Hola Florencia!
# ¡Hola Florencia!
# ¡Hola Florencia!
# ¡Hola Florencia!
saludo(repeticiones=2, nombre="Julián")
# Salida
# ¡Hola Julián!
# ¡Hola Julián!
Retorno de valores
Las funciones pueden devolver un resultado o valor de retorno usando la palabra reservada return
.
def area_circulo(radio):
return 3.14 * (radio ** 2)
resultado = area_circulo(10)
print(resultado) # Salida: 314
El valor de retorno se pasa de vuelta a donde se llamó la función y se puede asignar a una variable para usarlo.
Las funciones también pueden ejecutar alguna tarea sin devolver nada explícitamente. En Python esto se conoce como retornar None
.
Variables locales y globales
Las variables locales se definen dentro de una función y solo existen en ese ámbito, mientras que las variables globales están definidas fuera y pueden ser accedidas desde cualquier parte del código. Es crucial entender su alcance (dónde puede ser accesible una variable) y duración (cuánto tiempo vive una variable).
x = 10 # x es global
def suma():
y = 5 # y es local
return x + y
suma() # Salida: 15
print(y) # Error, y no existe fuera de la función
Podemos leer variables globales desde una función, pero si necesitamos modificarla debemos declararla global
.
x = 10
def suma():
global x
x = x + 5
suma()
print(x) # 15
Buenas prácticas
Al crear funciones debemos seguir ciertos principios y patrones4:
- El nombre de una función debe indicar claramente su propósito.
- Hacer las funciones pequeñas, simples y enfocadas en una tarea. Una función debe hacer una cosa y hacerla bien.
- Utilizar nombres descriptivos para las funciones y sus parámetros.
- Evitar efectos secundarios y modificación de variables globales.
- Documentar adecuadamente el propósito y uso de cada función.
- Limitar el número de parámetros, idealmente de 0 a 3 parámetros.
Seguir estas buenas prácticas nos ayudará a crear funciones reutilizables, encapsuladas y fáciles de mantener.
Conclusión
Las funciones son componentes fundamentales en la programación, permitiéndonos organizar, reutilizar y encapsular código. Definiendo funciones que realicen una sola tarea mantenemos nuestros programas simplificados, fáciles de entender y modificar. Al comprender y dominar este concepto, no solo mejoras la calidad de tu código sino también tu eficiencia como desarrollador.
¡Felicitaciones por llegar hasta acá! Espero que este recorrido por el universo de la programación te haya resultado tan interesante como lo fue para mí al escribirlo.
Queremos conocer tu opinión, así que no dudes en compartir tus comentarios, sugerencias y esas ideas brillantes que seguro tenés.
Además, para explorar más allá de estas líneas, date una vuelta por los ejemplos prácticos que armamos para vos. Todo el código y los proyectos los encontrás en nuestro repositorio de GitHub learn-software-engineering/examples-programming.
Gracias por ser parte de esta comunidad de aprendizaje. ¡Seguí programando y explorando nuevas areas en este fascinante mundo del software!
Referencias
McConnell, S. (2004). Code Complete. Microsoft Press. ↩︎
Joyanes Aguilar, L. (2008). Fundamentos de programación: algoritmos, estructura de datos y objetos. McGraw-Hill. ↩︎
Python Software Foundation. (2022). Documentación oficial de Python. ↩︎
Kindler, E., & Krivy, I. (2011). Object-Oriented Simulation of systems with Java: A working introduction. BoD–Books on Demand. ↩︎
Comentarios
¿Fue útil esta página?
¡Nos alegra mucho! Por favor dinos como podemos mejorar.
Nos apena que no te haya gustado. Por favor dinos como podemos mejorar.