Médio JavaScript
Soma com número variável de argumentos
Enunciado
Crie uma função somarTudo que aceita qualquer quantidade de números e retorna a soma de todos eles. Use o operador rest para agrupar os argumentos.
Requisitos
- A função deve se chamar
somarTudo. - Deve usar o operador rest (
...) para receber os números. - Deve retornar a soma de todos os números passados.
- Se nenhum número for passado, deve retornar
0.
Código inicial
// Crie a função somarTudo aqui
Saída esperada
10
0
15
Ver dica
Use function somarTudo(...numeros) { ... } e o método reduce para somar. Lembre-se do valor inicial 0.
Mostrar solução
// Função com parâmetro rest
function somarTudo(...numeros) {
return numeros.reduce((acc, n) => acc + n, 0);
}
console.log(somarTudo(1, 2, 3, 4)); // 10
console.log(somarTudo()); // 0
console.log(somarTudo(5, 10)); // 15
Passo a passo
- Declaramos
somarTudocom o parâmetro rest...numeros. Isso faz com que todos os argumentos sejam agrupados em um array chamadonumeros. - Usamos
numeros.reduce()para percorrer o array e acumular a soma. - O primeiro argumento do
reduceé a função redutora(acc, n) => acc + n, que soma o acumuladoraccao número atualn. - O segundo argumento do
reduceé o valor inicial0, garantindo que a soma comece em zero mesmo se o array estiver vazio. - A função retorna o resultado da soma.
- Testamos com quatro números, sem números e com dois números.
Por que funciona
O operador rest (...) coleta todos os argumentos em um array, permitindo que a função aceite um número variável de parâmetros. O reduce é ideal para reduzir um array a um único valor, e o valor inicial 0 trata corretamente o caso de array vazio.
Erros comuns
- Esquecer o valor inicial do
reduce: se o array estiver vazio,reducelança erro.
Corrija passandoreturn numeros.reduce((acc, n) => acc + n); // erro se numeros = []0como segundo argumento. - Usar
argumentsem vez de rest:argumentsnão é um array verdadeiro e não funciona em arrow functions. Prefira rest. - Colocar o rest antes de outros parâmetros: o rest deve ser o último parâmetro.
function f(...nums, x)é inválido.
Outra forma de resolver
Usando um loop for...of:
function somarTudo(...numeros) {
let soma = 0;
for (const n of numeros) {
soma += n;
}
return soma;
}
Essa abordagem é mais explícita e pode ser mais legível para iniciantes.
Saída esperada
10
0
15