Funciones
Una función es un bloque de código que podemos crear para realizar una tarea concreta.
Las funciones nos permiten organizar el código y reutilizarlo.
Por ejemplo, si necesitamos mostrar un par de mensajes varias veces, podríamos escribir:
console.log("Hola");
console.log("Que tal?");
console.log("Hola");
console.log("Que tal?");
console.log("Hola");
console.log("Que tal?");
Pero veremos será más cómodo crear una función que se encargue de mostrar ese par de mensajes:
function saludar() {
console.log("Hola");
console.log("Que tal?");
}
Y después utilizarla tantas veces como queramos:
saludar();
saludar();
saludar();
Como ves, englobar las dos instrucciones:
console.log("Hola");
console.log("Que tal?");
en una misma función reduce el número de líneas cada vez que queremos mostrar esos mensajes.
La idea principal es que creamos la función una vez y podemos ejecutarla tantas veces como necesitemos.
Pero, ¿cómo funciona exactamente?
Declaración de una función
La forma más tradicional de crear una función es mediante una declaración de función.
Su sintaxis es:
function nombreFuncion() {
// Código que hace la función
}
Por ejemplo:
function saludar() {
console.log("Hola");
}
Crear la función no significa que su código se ejecute inmediatamente. Sino simplemente, estamos indicando que existe esa función y cuál es su tarea.
Para ejecutarla debemos llamar a la función usando siempre su nombre y paréntesis:
saludar();
Salida:
Hola
Podemos llamar a una función tantas veces como queramos:
saludar();
saludar();
saludar();
Salida:
Hola
Hola
Hola
¿Por qué utilizar funciones?
Imagina que tenemos un programa bastante grande y necesitamos realizar la misma operación en diferentes lugares del código.
Sin funciones tendríamos que repetir el código todas las veces que queramos realizar dicha tarea. De esta forma, la lógica del cálculo está escrita una sola vez y simplemente con una línea se ejecutan todas las intrucciones que engloba la función.
Parámetros
Muchas veces necesitamos que una función trabaje con datos que nosotros le proporcionamos.
Estos datos se indican mediante parámetros.
Por ejemplo, la función anterior saludar() simplemente decía "Hola". Pero ahora imaginemos que queremos una función que pueda saluar a alguien en concreto. Es decir que pueda decir:
Hola Marta
Hola Adriana
Hola Juan
En estos casos al definir la función colocamos entre sus paréntesis el parámetro que necesite para funcionar. Al crear la función siempre tenemos en mente una generalización de la tarea. Por el ejemplo, en el ejemplo de saludar a alguien, pensaremos en realizar una función que dado un nombre lo salude.
Para ello:
function saludar(nombre) {
console.log(`Hola ${nombre}`);
}
En este caso, nombre es un parámetro. Si te fijas en el código de la función:
console.log(`Hola ${nombre}`);
La tarea que está haciendo ahora saludar(nombre) es mostrar el mensaje "Hola" seguido de sea cual sea el nombre que se ha proporcionado como parámetro.
Cuando llamamos a la función, ya le proporcionamos un valor específico:
saludar("Esther");
Salida:
Hola Esther
También podemos utilizar diferentes valores:
saludar("Carlos");
saludar("Laura");
Salida:
Hola Carlos
Hola Laura
Por otro lado, podemos tener varios parámetros:
function sumar(a, b) {
console.log(a + b);
}
Y llamarla:
sumar(5, 3);
Salida:
8
Los valores que proporcionamos al llamar a una función se denominan argumentos.
Por tanto:
function sumar(a, b) {
a y b son parámetros.
Mientras que:
sumar(5, 3);
5 y 3 son argumentos.
return
Hasta ahora las funciones que hemos visto simplemente muestran información utilizando console.log(). Pero la mayoría de las veces necesitaremos que la función realize una operación o cálculo y devuelva un resultado, no solo lo muestre.
Para ello utilizamos return.
Por ejemplo:
function sumar(a, b) {
return a + b;
}
Al utilizar return cuando llamamos a la función con sumar(5,3) podemos guardar el resultado en otra variable:
let resultado = sumar(5, 3);
console.log(resultado);
Salida:
8
La función calcula 5 + 3 y devuelve 8.
Podemos pensar en una función como una pequeña máquina:
5 3
↓ ↓
┌─────────────┐
│ sumar │
└─────────────┘
↓
8
El return es lo que permite sacar el resultado de la función para poder utilizarlo fuera de la función.
Por ejemplo:
function sumar(a, b) {
return a + b;
}
let resultado = sumar(5, 3);
console.log(`El resultado es: ${resultado}`);
let resultado = resultado + 3;
console.log(`Ahora el resultado es: ${resultado}`);
Salida:
El resultado es 8
Ahora el resultado es 11
return termina la función
Cuando una función encuentra un return, deja de ejecutarse.
Por ejemplo:
function comprobar() {
console.log("Inicio");
return;
console.log("Final");
}
Si ejecutamos:
comprobar();
Salida:
Inicio
El segundo console.log() nunca se ejecuta porque el return termina la función.
console.log() y return no son lo mismo
Es importante no confundirlos.
console.log() muestra un valor:
function sumar(a, b) {
console.log(a + b);
}
Mientras que return devuelve un valor:
function sumar(a, b) {
return a + b;
}
Con return podemos guardar el resultado:
let resultado = sumar(5, 3);
Esto no sería posible de la misma forma utilizando únicamente console.log().
Expresiones de función
Otra forma de crear una función es guardarla dentro de una variable.
A esto se le llama expresión de función. Es simplemente otra forma de escribir funciones.
Antes la sintaxis era:
function nombreFuncion() {
// Código de la función
}
Y ahora con expresión de función la sintaxis es:
let nombreFuncion = function() {
// Código de la función
};
Ahora podemos utilizar la función mediante el nombre de la variable:
nombreFuncion();
También podemos utilizar parámetros:
let sumar = function(a, b) {
return a + b;
};
console.log(sumar(5, 3));
Salida:
8
La diferencia principal respecto a una declaración tradicional es la forma en la que definimos la función:
function sumar(a, b) {
return a + b;
}
frente a:
let sumar = function(a, b) {
return a + b;
};
Ambas permiten crear funciones, pero la segunda guarda la función dentro de una variable.
Arrow functions
Las arrow functions, o funciones flecha, son una forma más corta de escribir funciones.
La sintaxis es:
const nombreFuncion = (parametros) => {
// Código
};
Por ejemplo, esta función:
function sumar(a, b) {
return a + b;
}
Se puede escribir como:
const sumar = (a, b) => {
return a + b;
};
La flecha => es la característica principal de este tipo de funciones.
Si la función solo tiene una expresión que devolver, podemos escribirla todavía más corta:
const sumar = (a, b) => a + b;
El return está implícito en este caso.
Arrow functions con un parámetro
Cuando una arrow function tiene un único parámetro, podemos escribirla sin paréntesis:
const cuadrado = numero => numero * numero;
También sería válido escribir:
const cuadrado = (numero) => numero * numero;
Las dos formas funcionan.
Arrow functions sin parámetros
Cuando no tenemos parámetros, debemos utilizar los paréntesis:
const saludar = () => {
console.log("Hola");
};
Y la llamamos normalmente:
saludar();
Comparación de las diferentes formas
Podemos crear una función para calcular el doble de un número de diferentes maneras.
Declaración
function doble(numero) {
return numero * 2;
}
Expresión
const doble = function(numero) {
return numero * 2;
};
Arrow function
const doble = numero => numero * 2;
Las tres representan la misma idea, pero utilizan una sintaxis diferente.
¿Cuándo utilizar cada una?
Al principio es recomendable aprender primero la declaración de funciones, ya que es la forma más sencilla de entender cómo funcionan.
Las expresiones de función y las arrow functions son muy habituales en JavaScript moderno.
Especialmente las arrow functions aparecen constantemente cuando trabajamos con arrays:
let numeros = [1, 2, 3, 4];
let dobles = numeros.map(numero => numero * 2);
Aquí numero => numero * 2 es una arrow function que se ejecuta para cada elemento del array.
Resumen
Las funciones permiten agrupar código para realizar una tarea y reutilizarlo.
Una función puede:
- Recibir datos mediante parámetros.
- Ejecutar determinadas instrucciones.
- Devolver un resultado mediante
return.
Las principales formas que hemos visto para crear funciones son:
function sumar(a, b) {
return a + b;
}
const sumar = function(a, b) {
return a + b;
};
const sumar = (a, b) => a + b;
Las funciones son una de las partes fundamentales de JavaScript y las utilizaremos continuamente a medida que avancemos en el lenguaje.
Ejemplos resueltos
Ejercicio resuelto 1 - Calcular un descuento
Enunciado
Crea una función que reciba un precio y devuelva el precio con un descuento del 20 %.
Análisis
La función necesita recibir el precio como parámetro y devolver el resultado del cálculo.
Solución
function aplicarDescuento(precio) {
return precio * 0.8;
}
let resultado = aplicarDescuento(50);
console.log(resultado);
Salida:
40
Explicación
La función recibe 50 como argumento.
Después calcula:
50 × 0.8 = 40
Finalmente, return devuelve el resultado y podemos guardarlo en la variable resultado.
Ejercicio resuelto 2 - Comprobar si un número es par
Enunciado
Crea una función que reciba un número y devuelva true si es par y false si es impar.
Solución
const esPar = numero => numero % 2 === 0;
console.log(esPar(8));
console.log(esPar(7));
Salida:
true
false
Explicación
El operador % obtiene el resto de una división.
Si un número dividido entre 2 tiene resto 0, es par.
La función devuelve directamente el resultado de la comparación.