Una función es un bloque de código organizado y reutilizable que se usa para realizar alguna acción. Hay varias maneras de definir funciones en JavaScript. Aquí veremos las declaraciones de función y las expresiones de función. Otras posibilidades, como las funciones flecha, se cubrirán en otros conceptos.
La forma estándar de definir una función en JavaScript es una declaración de función, también llamada definición de función o sentencia de función.
Consiste en la palabra clave function, el nombre de la función y una lista de parámetros separados por comas entre paréntesis.
A esto le sigue el cuerpo de la función (el conjunto de sentencias que define qué hace una función), encerrado entre llaves.
function someName(param1, param2, param3) {
// ...
}
En JavaScript, una función se invoca (se llama) escribiendo el nombre de la función seguido de paréntesis que contienen los argumentos.
someName(arg1, arg2, arg3);
Cuando trabajas con parámetros dentro del cuerpo de la función, ten en cuenta los posibles efectos secundarios.
De forma predeterminada, todos los parámetros definidos en la declaración de la función son opcionales en JavaScript.
Si proporcionas menos argumentos que parámetros hay, los argumentos faltantes serán undefined dentro de la función; consulta Null y Undefined.
En muchos casos tiene sentido asignar un valor predeterminado más apropiado que undefined.
Esto se puede hacer especificando parámetros predeterminados directamente en la definición de la función.
function someName(param1 = defaultValue1, param2 = defaultValue2) {
// ...
}
Una sentencia return termina la ejecución de la función y especifica un valor que se devolverá a quien llamó a la función. Una función puede tener varias sentencias return.
function checkNumber(num) {
if (num === 0) {
return 'You passed 0, please provide another number.';
}
return 'Thanks for passing such a nice number.';
}
El valor que devuelve una función se puede guardar en una variable.
function sum(x, y) {
return x + y;
}
const total = sum(5, 10);
// => 15
El resultado de una función que no devuelve ningún valor o que no tiene una sentencia return es undefined.
En JavaScript no hay return implícitos.
function nakedReturn(a) {
a * 2;
return;
}
nakedReturn(1);
// => undefined
function noReturn(a) {
a * 2;
}
noReturn(1);
// => undefined
En JavaScript solo puedes devolver exactamente un valor. Si quieres pasar más información, primero debes combinarla en una sola entidad, por lo general en un objeto o un array.
function divide(a, b) {
return {
quotient: Math.floor(a / b),
remainder: a % b,
};
}
Una declaración de función es una sentencia independiente. Pero a veces es útil definir una función como parte de otra expresión, por ejemplo, en una asignación, como parámetro de una función (callback) o como valor en un objeto. Esto se puede hacer con una expresión de función. Tiene la misma sintaxis que una declaración de función, solo que se puede omitir el nombre de la función para crear una función anónima.
const someFunction = function (param) {
// ...
};
someOtherFunction(function (param) {
// ...
});
const obj = {
someFunction: function (param) {
// ...
},
};
En este ejercicio vas a escribir un poco más de código relacionado con preparar y cocinar tu brillante lasaña de tu libro de cocina favorito.
Tienes cinco tareas. La primera está relacionada con la cocción en sí, y las otras cuatro con la preparación perfecta.
Cuando tienes una lasaña en el horno, quieres saber si ya puedes sacarla o no. Para asegurarte de que la lasaña no se queme en el horno, normalmente pones un temporizador. Pero a veces se te olvida.
Escribe una función cookingStatus que acepte como parámetro el tiempo restante del temporizador en minutos.
La función tiene tres resultados posibles.
0, debe devolver 'Lasagna is done.'.'Not done, please wait.'.'You forgot to set the timer.'.El temporizador nunca mostrará un valor menor que 0.
cookingStatus(12);
// => 'Not done, please wait.'
cookingStatus();
// => 'You forgot to set the timer.'
Para la próxima lasaña que prepares, quieres asegurarte de reservar suficiente tiempo para poder disfrutar de la cocción. Ya hiciste un plan con todas las capas que tendrá tu lasaña. Ahora quieres calcular cuánto tardará la preparación a partir de eso.
Implementa una función preparationTime que acepte un array de capas y el tiempo promedio de preparación por capa en minutos.
La función debe devolver la estimación del tiempo total de preparación según el número de capas.
Si se llama a la función sin proporcionar el tiempo promedio de preparación, se deben asumir 2 minutos en su lugar.
const layers = ['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles'];
preparationTime(layers, 3);
// => 18
preparationTime(layers);
// => 12
Además de reservar el tiempo, también quieres asegurarte de tener suficiente salsa y fideos para cocinar la lasaña de tus sueños. Por cada capa de fideos en tu lasaña, necesitarás 50 gramos de fideos. Por cada capa de salsa en tu lasaña, necesitarás 0.2 litros de salsa.
Define la función quantities que toma un array de capas como parámetro.
La función determinará entonces la cantidad de fideos y salsa necesaria para preparar tu comida.
El resultado debe devolverse como un objeto con las claves noodles y sauce.
quantities(['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles']);
// => { noodles: 100, sauce: 0.4 }
Hace un tiempo visitaste a un amigo y comiste lasaña en su casa. Estaba increíble y tenía algo especial. Tu amigo te envió la lista de ingredientes y te dijo que el último elemento de la lista es el «ingrediente secreto» que hizo que la comida fuera tan especial. Ahora quieres agregar ese ingrediente secreto también a tu receta.
Escribe una función addSecretIngredient que acepte dos arrays de ingredientes como parámetros.
El primer parámetro es la lista que te envió tu amigo y el segundo es la lista de ingredientes de tu propia receta.
La función debe agregar el último elemento de la lista de tu amigo al final de tu lista.
El array que representa tu receta debe modificarse directamente y la función no debe devolver nada.
Sin embargo, el primer argumento no debe modificarse.
const friendsList = ['noodles', 'sauce', 'mozzarella', 'kampot pepper'];
const myList = ['noodles', 'meat', 'sauce', 'mozzarella'];
addSecretIngredient(friendsList, myList);
// => undefined
console.log(myList);
// => ['noodles', 'meat', 'sauce', 'mozzarella', 'kampot pepper']
Las cantidades que aparecen en tu libro de cocina solo alcanzan para dos porciones de lasaña. Como la próxima vez quieres cocinar para más personas, quieres calcular las cantidades para distintos números de porciones.
Implementa una función scaleRecipe que tome dos parámetros.
La función debe devolver un objeto de receta con las cantidades necesarias para el número de porciones deseado. Pero quieres conservar la receta original. Esto significa que, en esta tarea, el argumento de la receta no debe modificarse.
const recipe = {
noodles: 200,
sauce: 0.5,
mozzarella: 1,
meat: 100,
};
scaleRecipe(recipe, 4);
// =>
// {
// noodles: 400,
// sauce: 1,
// mozzarella: 2,
// meat: 200,
// };
console.log(recipe);
// =>
// {
// noodles: 200,
// sauce: 0.5,
// mozzarella: 1,
// meat: 100,
// };
Regístrate en Exercism para aprender y dominar JavaScript con 37 conceptos159 ejercicios y mentoría humana real, todo gratis.