Operador rest em JavaScript
Vamos começar esta lição com uma explicação.
Em todas as lições anteriores desta seção, eu não
contei a verdade completa sobre o operador ...
Na verdade, este operador, dependendo do local no código, pode ser chamado de operador spread ou operador rest.
Como você já sabe, quando o operador spread
está antes de um array ou string, ele os divide
em valores individuais. O operador rest,
embora tenha a mesma sintaxe ...,
é destinado a outra coisa.
Agora vamos entender para quê. Suponha que temos uma função que aceita dois parâmetros:
function func(a, b) {
console.log(a);
console.log(b);
}
Você já deve saber que se passarmos parâmetros extras para a função, isso não causará um erro:
func(1, 2, 3, 4, 5);
O operador rest permite obter todos
os parâmetros extras na forma de um array. Para isso,
adiciona-se mais um parâmetro à função (obrigatoriamente
por último), antes do qual são escritos 3 pontos:
function func(a, b, ...rest) {
}
Esses três pontos são o operador rest, e o nome
da variável pode ser qualquer um, mas
geralmente também é convencionado chamá-lo de rest.
Vamos chamar nossa função com um número excessivo
de parâmetros e ver o que chega
aos parâmetros a e b, e o que -
ao restante rest:
func(1, 2, 3, 4, 5);
function func(a, b, ...rest) {
console.log(a); // exibirá 1
console.log(b); // exibirá 2
console.log(rest); // exibirá [3, 4, 5]
}
Se não houver parâmetros extras, a variável
rest será um array vazio:
func(1, 2);
function func(a, b, ...rest) {
console.log(a); // exibirá 1
console.log(b); // exibirá 2
console.log(rest); // exibirá []
}
A função pode não ter parâmetros,
mas ainda assim é possível adicionar rest a ela.
Nesse caso, a função pode ser chamada
com qualquer número de parâmetros e todos eles
entrarão no array rest:
function func(...rest) {
console.log(rest);
}