Desestruturação ou desctructuring é uma funcionalidade do JavaScript ES6 que nos permite extrair dados de arrays, objetos e até retorno de funções em variáveis distintas.

destructuring es6 capa

Este conteúdo está disponível em vídeo também:

 

Com Destructuring podemos escrever menos código e atingir o mesmo objetivo do que nas versões antigas de JavaScript e em vários casos

Basicamente ele muda a antiga forma de atribuir valor a uma variável em cada linha, e nos da a possibilidade de fazer isso em uma só

Vamos agora ver a utilização do recurso nestes

Array para variáveis:

Podemos atribuir valores a várias variáveis que os valores vem de um array com apenas uma única linha, veja:

// array para variável
const arr = [1,2,3,4,5];
let [a,b,c,d,e] = arr;
console.log(a); // 1
console.log(b); // 2
console.log(c); // 3
console.log(d); // 4
console.log(e); // 5

No exemplo acima desestruturamos um array arr nas variáveis a, b, c, d e e

Objeto para variáveis:

E da mesma forma podemos usar o destructuring em objetos, veja:

const obj = {
    nome: 'Matheus',
    sobrenome: 'Battisti',
    idade: 28,
    pais: 'Brasil'
}

let {nome: n, sobrenome: s, idade: i, pais: p} = obj

console.log(`${n} ${s} tem ${i} e mora no ${p}.`) // Matheus Battisti tem 28 e mora no Brasil.

E ainda se utilizarmos o mesmo nome da propriedade para variável, podemos condensar o código mais ainda:

let {nome, sobrenome} = obj

console.log(`${nome} ${sobrenome}`) // Matheus Battisti

Neste caso não precisamos colocar nome: nome e sim só nome, graças ao destructuring

Funções para variáveis:

Outra forma de utilizar o destructuring é atribuindo variáveis de acordo com o retorno de uma função, confira:

function numeros() {
    return [5, 10];
}

let [num1, num2] = numeros();

console.log(num1); // 5
console.log(num2); // 10

Ignorando elementos:

Caso nosso objetivo não seja utilizar todos os valores do array, podemos pular os elementos que não desejamos

Veja o exemplo a seguir:

// ignorando elementos
const lista = ['Maçã', 'Laranja', 'Banana', 'Caqui'];

let[, , ,caqui] = lista

console.log(caqui); // Caqui

Adicionamos apenas o valor do último elemento a variável caqui, com as vírgulas e o espaço vazio o elemento que não desejamos foi ignorado

Funciona com qualquer coisa que pode ser iterada:

Uma função de utilidade duvidosa, porém vale o aprendizado 😀

Destructuring pode atribuir para variáveis qualquer valor que pode ser iterado

let [x,y,z] = 'xyz';

console.log(x); // x
console.log(y); // y
console.log(z); // z

No exemplo acima vemos uma string que foi separada em 3 partes, uma para cada variável

Destructuring com Rest Operator:

Podemos também fazer uso com a funcionalidade do Rest de separar o resto de um array para uma determinada variável

const numeros2 = [1,2,3,4,5,6,7,8,9,10];

const [parte1, ...parte2] = numeros2;

console.log(parte1); // 1 
console.log(parte2); // [2, 3, 4, 5, 6, 7, 8, 9, 10]

Perceba que parte1 recebeu apenas o primeiro número, conforme funciona o destructuring normalmente

Porém parte2 recebeu o resto pois a atribuição recebeu o Rest Operator

Cuidados ao usar o destructuring

Há dois pontos conhecidos que podem nos levar aos chamados pitfalls quando utilizamos o destructuring

São eles:

  • Não podemos iniciar uma declaração com chaves;
  • Para declarar e atribuir valor a variáveis precisamos colocar var, let ou const antes;

Vamos ver por código:

const pessoa = {
    nome: 'Alexia',
    sobrenome: 'Couto'
}

let q,w;

{q , w} = pessoa; // Syntax Error

({q, w} = pessoa); // ok

No exemplo acima tentamos fazer uma atribuição direta a q e w e então recebemos um erro de sintaxe, pois não podemos abrir a sentença com {

Então para evitar este problema inicie com (

({p1, p2}) = pessoa); // Uncaught SyntaxError

const {p1, p2} = pessoa; // ok

Agora neste exemplo declaramos e atribuimos valores a p1 e p2, que ainda não foram declaradas, o que ocasiona um erro

Porém podemos resolver isso com let, var ou const antes

Repositório

Você pode encontrar todo o código utilizado aqui!

Conclusão

Vimos que o destructuring pode ser utilizado para atribuir variáveis por valores vindos de arrays, objetos e também funções

Ele funciona bem com o operador Rest e também com qualquer valor que pode ser iterado

Os pitfalls são poucos e podemos até dizer que não são motivos para evitar o destructuring

Para quem não sabe como funciona o recurso pode parecer um tanto confuso

Porém com um pouco de prática já fica fácil de entender o que está acontecendo

Confira também o nosso canal do Youtube com muito conteúdo sobre programação, clicando aqui.

Então por hoje é isso galera, obrigado por lerem até o fim e até o próximo! 🙂

Subscribe
Notify of
guest

0 Comentários
Inline Feedbacks
View all comments