Uma função é um bloco de código organizado e reutilizável usado para executar alguma ação. Existem várias maneiras de definir funções em JavaScript. Aqui vamos ver declarações de função e expressões de função. Outras possibilidades, como arrow functions, serão abordadas em outros conceitos.
A forma padrão de definir uma função em JavaScript é a declaração de função, também chamada de definição de função ou instrução de função.
Ela consiste na palavra-chave function, no nome da função e em uma lista de parâmetros separados por vírgulas, entre parênteses redondos (()).
Em seguida vem o corpo da função (conjunto de instruções que define o que a função faz), envolvido por chaves ({}).
function someName(param1, param2, param3) {
// ...
}
Em JavaScript, uma função é invocada (chamada) ao escrever o nome da função seguido de parênteses que contêm os argumentos.
someName(arg1, arg2, arg3);
Ao trabalhar com parâmetros dentro do corpo da função, fique atento a possíveis efeitos colaterais.
Por padrão, todos os parâmetros definidos na declaração da função são opcionais em JavaScript.
Se você passar menos argumentos do que o número de parâmetros, os argumentos que faltarem serão undefined dentro da função; veja Null e Undefined.
Em muitos casos, faz sentido atribuir um valor padrão mais adequado que undefined.
Isso pode ser feito especificando parâmetros padrão diretamente na definição da função.
function someName(param1 = defaultValue1, param2 = defaultValue2) {
// ...
}
return
Uma instrução return encerra a execução da função e especifica um valor a ser retornado para quem chamou a função. Uma função pode ter várias instruções return.
function checkNumber(num) {
if (num === 0) {
return 'You passed 0, please provide another number.';
}
return 'Thanks for passing such a nice number.';
}
O valor de retorno de uma função pode ser armazenado em uma variável.
function sum(x, y) {
return x + y;
}
const total = sum(5, 10);
// => 15
O resultado de uma função que não retorna nenhum valor ou que não tem uma instrução return é undefined.
Não existem return implícitos em JavaScript.
function nakedReturn(a) {
a * 2;
return;
}
nakedReturn(1);
// => undefined
function noReturn(a) {
a * 2;
}
noReturn(1);
// => undefined
Em JavaScript, você só pode retornar exatamente um valor. Se você quiser passar mais informações, precisa primeiro combiná-las em uma única entidade, geralmente um objeto ou um array.
function divide(a, b) {
return {
quotient: Math.floor(a / b),
remainder: a % b,
};
}
Uma declaração de função é uma instrução independente. Mas às vezes é útil definir uma função como parte de outra expressão, por exemplo, em uma atribuição, como parâmetro de uma função (callback) ou como valor em um objeto. Isso pode ser feito com uma expressão de função. Ela tem a mesma sintaxe de uma declaração de função, só que o nome da função pode ser omitido para criar uma função anônima.
const someFunction = function (param) {
// ...
};
someOtherFunction(function (param) {
// ...
});
const obj = {
someFunction: function (param) {
// ...
},
};
Neste exercício, você vai escrever mais um pouco de código relacionado a preparar e cozinhar sua lasanha incrível do seu livro de receitas favorito.
Você tem cinco tarefas. A primeira é relacionada ao cozimento em si, as outras quatro são sobre o preparo perfeito.
Quando você tem lasanha no forno, você quer saber se já pode tirá-la ou não. Para garantir que a lasanha não queime no forno, você normalmente define um timer. Mas às vezes você esquece disso.
Escreva uma função cookingStatus que recebe como parâmetro o tempo restante no timer em minutos.
A função tem três resultados possíveis.
0, ela deve retornar 'Lasagna is done.'.'Not done, please wait.'.'You forgot to set the timer.'.O timer nunca vai mostrar um valor abaixo de 0.
cookingStatus(12);
// => 'Not done, please wait.'
cookingStatus();
// => 'You forgot to set the timer.'
Para a próxima lasanha que você vai preparar, você quer garantir que tem tempo suficiente reservado para poder curtir o cozimento. Você já fez um plano com todas as camadas que sua lasanha vai ter. Agora você quer estimar quanto tempo o preparo vai levar com base nisso.
Implemente uma função preparationTime que recebe um array de camadas e o tempo médio de preparo por camada em minutos.
A função deve retornar a estimativa do tempo total de preparo com base no número de camadas.
Se a função for chamada sem fornecer o tempo médio de preparo, deve-se assumir 2 minutos.
const layers = ['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles'];
preparationTime(layers, 3);
// => 18
preparationTime(layers);
// => 12
Além de reservar o tempo, você também quer garantir que tem molho e macarrão suficientes para cozinhar a lasanha dos seus sonhos. Para cada camada de macarrão na sua lasanha, você vai precisar de 50 gramas de macarrão. Para cada camada de molho na sua lasanha, você vai precisar de 0,2 litro de molho.
Defina a função quantities que recebe um array de camadas como parâmetro.
A função vai então determinar a quantidade de macarrão e molho necessária para fazer sua refeição.
O resultado deve ser retornado como um objeto com as chaves noodles e sauce.
quantities(['sauce', 'noodles', 'sauce', 'meat', 'mozzarella', 'noodles']);
// => { noodles: 100, sauce: 0.4 }
Um tempo atrás, você visitou um amigo e comeu lasanha lá. Estava incrível e tinha algo especial. O amigo te mandou a lista de ingredientes e disse que o último item da lista é o "ingrediente secreto" que deixou a refeição tão especial. Agora você quer adicionar esse ingrediente secreto à sua receita também.
Escreva uma função addSecretIngredient que recebe dois arrays de ingredientes como parâmetros.
O primeiro parâmetro é a lista que seu amigo te mandou e o segundo é a lista de ingredientes da sua própria receita.
A função deve adicionar o último item da lista do seu amigo ao final da sua lista.
O array que representa sua receita deve ser modificado diretamente e a função não deve retornar nada.
No entanto, o primeiro argumento não deve ser modificado.
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']
As quantidades listadas no seu livro de receitas só rendem lasanha suficiente para duas porções. Como você quer cozinhar para mais pessoas na próxima vez, você quer calcular as quantidades para diferentes números de porções.
Implemente uma função scaleRecipe que recebe dois parâmetros.
A função deve retornar um objeto de receita com as quantidades necessárias para o número desejado de porções. No entanto, você quer manter a receita original. Isso significa que, nesta tarefa, o argumento da receita não deve ser modificado.
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,
// };
Crie sua conta no Exercism para aprender e dominar JavaScript com 37 conceitos159 exercícios e mentoria humana de verdade, tudo de graça.