Funções e dados · unidade 11 de 27
Spread e rest
O mesmo operador expande dados ou coleta o restante.
01 / 07Use as setas do teclado ou deslize
Leitura
Cópias, overrides e remoção segura de campos sensíveis usando os três pontos do JavaScript.
No backend, esse fundamento aparece quando o código transforma entrada em decisão. O detalhe de linguagem deixa de ser acadêmico no momento em que altera um payload, uma regra de negócio ou a forma como uma falha chega à camada seguinte.
A forma mais útil de estudar é ligar a sintaxe a um contrato observável: o que entra, o que pode mudar, qual resultado sai e qual erro deve continuar o fluxo. É esse raciocínio que os exemplos e exercícios desta unidade procuram treinar.
Código
const { passwordHash, ...safeUser } = user
const config = { ...base, ...overrides }O que fica
- Em overrides, o último valor vence.
- Rest torna explícito o que ficou de fora.
- Spread não copia profundamente objetos aninhados.
Prática guiada.Leia, rode, quebre e explique cada exercício.
Prática guiada / unidade 11
Um problema de cada vez.
Leia o contrato, escreva sua tentativa e confira os casos esperados. A resolução de referência permanece visível ao final de cada exercício.
cloneArray(arr)
01 / Entenda
Enunciado
retorna uma cópia rasa do array usando
spread ([...arr]).
02 / Implemente
Sua tentativa
Comece pela assinatura e resolva sem olhar a resposta.
function cloneArray(arr) {
// Escreva sua solução aqui.
}03 / Preveja
Entrada e saída
Use estes exemplos para entender o contrato antes de programar.
Entrada / chamada
cloneArray(original)Retorno esperado
cria uma cópia independente do array original04 / Teste
Prove que funciona
O teste chama sua função e compara o resultado real com o esperado.
Como utilizar este teste
- 01Implemente a função usando exatamente o nome e os parâmetros do enunciado.
- 02Salve sua implementação em
exercises.js, na mesma pasta do teste. - 03Abra o terminal nessa pasta e execute o comando abaixo.
- 04Se falhar, compare “esperado” com “recebido”; essa diferença mostra o caso que precisa ser corrigido.
node --test --test-name-pattern="cloneArray" exercises.test.jsComportamentos cobertos
- cria uma cópia independente do array original
Ver código completo do teste
test("cloneArray: cria uma cópia independente do array original", () => {
const original = [1, 2, 3];
const copy = cloneArray(original);
assert.deepEqual(copy, [1, 2, 3]);
assert.notEqual(copy, original);
copy.push(4);
assert.deepEqual(original, [1, 2, 3]);
});Ainda travou?
Dicas graduais
Nível 2 — pista mais direta
cloneArray/cloneObject: [...arr] e {...obj}.
05 / Compare
Resolução
function cloneArray(arr) {
throw new Error("not implemented: cloneArray");
}