roger-melo-treinamentos / curso-de-js-roger-melo

Repositório de informações do CJRM
491 stars 170 forks source link

Resumo da Aula Correção dos exercícios da Aula 02-01 da etapa 15 #7855

Closed OnielStgo closed 9 months ago

OnielStgo commented 9 months ago

REST PARAMETERS

Usamos o rest parameters quando não sabemos a quantidade de argumentos (dai vem o nome de rest parameters) que vai receber uma função (isso o que chamamos de função variádica) quando ela for invocada. Ou seja, usamos o rest parameters na declaração de uma função (dai o nome de rest parameters) para indicar que a função pode receber uma quantidade variável de argumentos ao ser invocada.

O "spread operator" é muito parecido ao "rest parameters" já que ambos usam a mesma sintaxe dos três pontos, mas a diferença é que usamos o "spread operator" nas "invocações das funções" para espalhar os itens de um arreglo (o as propriedades de um objeto), no entanto, usamos o "rest parameters" nas declarações das funções para "colocar" dentro de um arreglo todos os argumentos que a invocação da função recebeu, independente de quantos argumentos sejam. Ou seja, quando declaramos uma função e não sabemos quantos argumentos ela vai receber quando seja invocada, podemos usar o "rest parameters" na declaração da função para colocar dentro de um array todos os argumentos que a função vai receber.

Segue exemplo onde usamos o rest parameters para declarar uma função que recebe uma quantidade variável de números como parâmetros e retorna a soma desses números. Neste exemplo também vamos usar o "spread operator":

const numbers2 = [50, 100];
const numbers3 = [50, 100, 200];
const numbers4 = [50, 100, 200, 250];

const sum = (...arr) => arr.reduce((acc, num) => acc + num, 0);     //aqui estamos usando o rest parâmetros

console.log(sum(...numbers2));      // 150        //aqui estamos usando o spread operator
console.log(sum(...numbers3));      // 350
console.log(sum(...numbers4));      // 600

//Também na declaração de uma função podemos usar parámetros "normais" e rest parameters ao mesmo tempo. A seguir um exemplo:
const name = 'Peter';
const qualifications = [99, 100, 95];
const qualifications2 = [99, 100, 95, 97, 90];

const showQualifications = (userName, ...params) => {                 //aqui estamos usando o rest parameters
  const sum = params.reduce((acc, num) => acc + num ,0);
  return `${userName} sua media é: ${sum/params.length} `;
}

console.log(showQualifications(name, ...qualifications));     //Peter sua media é: 98                    //aqui usamos o spread operator
console.log(showQualifications(name, ...qualifications2));     //Peter sua media é: 96.2

Uso de rest parameters na desestruturação de objetos (ou arreglos)

Como já sabemos, o rest parameters é usado na declaração de uma função, mas acontece que também podemos usar o rest parameters na desestruturação de um objeto (ou um arreglo também) para armazenar o restante das propriedades do objeto que estamos desestruturando dentro de um outro objeto (ou o restante dos itens de um arreglo dentro de um outro arreglo). A seguir um exemplo:

const {a, b, ... x} = {a: 1, b: 2, c: 3, d: 4}

console.log(a);     // 1
console.log(b);     // 2
console.log(x);     // {c: 3, d: 4}

const [e, f, ...y] = [1, 2, 3, 4, 5, 6];

console.log(e);     // 1
console.log(f);     // 2
console.log(y);     // [3, 4, 5, 6]