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.
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.