Una función es un bloque de código al que ponemos un nombre que realiza una tarea específica. Son una herramienta fundamental para estructurar y reutilizar el código en la programación moderna.
Las funciones permiten reutilizar el código, modularizarlo y estructurarlo de una manera más manejable. Una buena definición de funciones es clave para escribir código limpio y mantenible.
Para explicar qué es una función se suele decir como ejemplo que es una “máquina” donde “entran cosas” y “salen cosas”.
Por ejemplo, supón que queréis calcular la raíz cuadrada de un número. Imagina que cada vez que tuvieras que hacer una raíz cuadrada tuvieras que poner el código (que ya te digo, corto no es) ¡Sería una locura!
En este caso alguien ya se ha tomado la molestia de programar esa funcionalidad por ti. Así tu puedes llamarla cómodamente desde tu programa.
var raiz = raiz_cuadrada(25)
En esta caso la función raiz_cuadrada
es “una máquina” en la que:
- Entra un 25
- Sale un 5
Lo que hay “dentro de la máquina” y lo que hace, de momento, no nos importa mucho. Lo que nos importa es que funciona y que la podemos usar para calcular raíces cuadradas.
Ventajas de usar funciones
Una de los principales motivos para emplear funciones es que permiten la reutilización del código. En lugar de tener que copiar y pegar el mismo código en diferentes partes de un programa, se puede crear una función y llamarla en diferentes lugares según sea necesario (esto no solo hace que el código sea más fácil de escribir, sino también de mantener y actualizar).
Otra ventaja importante de las funciones es que permiten estructurar el código en módulos más pequeños y manejables (esto hace que el código sea más fácil de entender y depurar, y permite que múltiples programadores trabajen en el mismo proyecto de manera más eficiente)
Además, las funciones pueden ser,
- Creadas por nosotros mismos
- Creadas por otras personas
No os asustéis demasiado con lo de “creadas por nosotros mismos”. Es algo tan habitual que lo harás constantemente, sin que te cueste ningún esfuerzo.
Además, las funciones se pueden agrupar en bibliotecas o paquetes. Por ejemplo, podrías tener una biblioteca de funciones matemáticas, con muchas utilidades para realizar cálculos.
Cómo invocar una función
Al proceso de usar una función, se le dice “llamar” o “invocar” a la función (que suena a sacrificar una cabra 🐐 en un pentateuco para llamar al maligno, pero que le voy a hacer… se llama así).
En la mayoría de lenguajes el operador de invocación son los paréntesis ( )
. Por lo que para llamar a una función usamos el nombre de la función, seguido de ( )
. Así,
suma(3, 5)
Aunque no en todos los lenguajes es así. Por ejemplo, en Haskell o F# se emplea simplemente el nombre de la función
suma 3 5
En cualquier caso, el concepto es igual. Invocar a una función que se ha definido, para que esta ejecute su tarea.
Ejemplos de funciones en distintos lenguajes
Vamos a ver cómo se definen funciones en distintos lenguajes de programación.
En los lenguajes de tipado estricto, se suele emplear el tipo que devuelve la función para iniciar la definición de la misma. Ejemplo de ello son C++, C#, y Java:
void miFuncion() {
// cuerpo de la funcion
}
miFuncion(); // llamar a la funcion
Otros lenguajes prefieren emplear una palabra reservada específica para comenzar la definición de la función.
Por ejemplo, en JavaScript y TypeScript se emplea la palabra reservada function
:
function miFuncion() {
// cuerpo de la funcion
}
miFuncion(); // llamar a la funcion
Mientras que en Python se emplea la palabra reservada def
:
def miFuncion():
# cuerpo de la funcion
miFuncion()
Aparte de estas diferencias, en general, vemos que las funciones se definen de forma muy similar y se invocan de forma muy similar.
Buenas prácticas Consejos
Utiliza nombres descriptivos: Elige nombres de funciones que reflejen su propósito y lo que hacen. Los nombres descriptivos facilitan la comprensión del código y hacen que sea más legible.
Una función debe ser encargada de una única cosa: Es recomendable que una función tenga una única responsabilidad o tarea específica. Esto facilita la comprensión y el mantenimiento del código. Si una función está realizando múltiples tareas, considera dividirla en funciones más pequeñas y cohesivas.
Mantén tus funciones cortas y concisas: Las funciones deben tener una responsabilidad clara y realizar una tarea específica. Si una función se vuelve demasiado larga, considera dividirla en funciones más pequeñas y reutilizables.
Evita efectos secundarios: Las funciones deben ser “puras” siempre que sea posible, es decir, no deben tener efectos secundarios y solo deben depender de sus argumentos. Esto hace que el código sea más predecible y fácil de razonar.