Funciones

Digamos que estás fijando precios de artículos en un carrito. Tomas un número, le sumas el impuesto, lo redondeas y lo formateas con un símbolo de moneda. Luego necesitas hacerlo de nuevo para el siguiente artículo, y el siguiente. Copiar esos cuatro pasos en todas partes es cómo entran los errores: arregla el redondeo en un lugar y tienes tres más copias aún mal. Una función te deja nombrar ese bloque de pasos una sola vez y ejecutarlo cuando lo necesites. Este capítulo trata sobre escribir esos bloques, alimentarlos con entradas y obtener valores de vuelta.
Declarar y llamar una función
Una función es un bloque de código nombrado que puedes ejecutar cuando quieras. Escribes los pasos una vez, les das un nombre, y luego los ejecutas por ese nombre tantas veces como quieras.
Haces una con la palabra clave function:
function greet() {
console.log("Hola");
}Esa es toda la definición, pero aún no ha pasado nada. Escribir una función almacena los pasos; no los ejecuta. Para realmente ejecutarla, la llamas escribiendo su nombre seguido de paréntesis:
greet(); // Hola
greet(); // HolaDos líneas, dos saludos, desde un bloque de código. Definir y llamar son cosas separadas, y confundirlas es lo primero que detiene a la gente.
Dale a una función un nombre claro, tipo verbo, para lo que hace (greet, logDivider), el mismo cuidado que pones al nombrar variables. Una función que llamas en diez lugares es solo tan legible como su nombre.
greet(). Esa división me confundía al principio: la definición es la receta, la llamada es realmente cocinar. Puedes llamar la misma función tantas veces como quieras. Parámetros y valores de retorno
Una función es más útil cuando puedes alimentarla con algo. Los valores que alimentas son parámetros: nombres listados entre paréntesis que se sostienen por lo que pases cuando la llames.
function greet(name) {
console.log("Hola " + name);
}
greet("Santiago"); // Hola Santiago
greet("Lucía"); // Hola Lucíaname es el parámetro. Cuando llamas a greet("Santiago"), el texto "Santiago" se coloca en name para esa ejecución. Una función, resultados diferentes, dependiendo de lo que le pases.
Hasta ahora estas funciones imprimen algo. A menudo quieres que una función devuelva un valor en su lugar, para que puedas usarlo después. Eso es lo que return hace:
function double(number) {
return number * 2;
}
const result = double(5);
console.log(result); // 10return envía un valor fuera de la función. double(5) se convierte en 10, y puedes almacenarlo, imprimirlo o pasarlo. Imprimir muestra un valor en pantalla; devolver lo devuelve a tu código para que sigas usándolo.
return devuelve un valor para que tu código lo use después. Imprimir con console.log lo muestra en pantalla; devolver lo devuelve a ti. Me tomó un tiempo sentir esa diferencia. Funciones flecha
Hay una forma más corta de escribir una función, llamada una función flecha. La almacenas en una variable y usas la flecha => en lugar de la palabra clave function:
const add = (a, b) => {
return a + b;
};
console.log(add(2, 3)); // 5Cuando la función es una sola expresión como esta, puedes dejar caer las llaves y return y dejar que la flecha devuelva el valor para ti:
const add = (a, b) => a + b;
console.log(add(2, 3)); // 5Ambas hacen lo mismo. Verás funciones flecha en todas partes en JavaScript moderno, así que ayuda reconocer la forma: un nombre, un =, las entradas, una flecha, y el cuerpo.
=> en lugar de la palabra clave function. Cuando el cuerpo es una expresión, puedes dejar caer las llaves y return y la flecha devuelve el valor para ti. Verás esta forma constantemente, así que ponerse cómodo leyéndola se paga rápido. Hacia dónde van las funciones desde aquí
Las funciones son cómo dejas de repetirte: nombra un bloque de pasos, alimentalo con entradas, obtén un valor de vuelta. Una vez que eso hace clic, la mayoría del código que escribes se convierte en funciones pequeñas llamando a otras funciones, cada una haciendo un trabajo claro.
Desde aquí, las funciones aparecen en todas partes. Las pasarás a métodos de array para transformar listas de datos, las usarás para organizar la lógica ramificada de condicionales, y te apoyarás en la disciplina de nomenclatura que comenzaste con variables. La próxima vez que te atrapes a ti mismo copiando un bloque de código, esa es la señal de envolverlo en una función en su lugar.

