Destructuring in Javascript & Clojure (pt 1) – Intro

No EcmaScript 2015, <em> desestruturação é uma maneira de obter exatamente o que você precisa de um objeto ou matriz e nem mais, nem menos. </em>

Vamos começar examinando como você destruiria um objeto.

// For objects
let {bar: a, quux: b} = {foo: 'carrot', bar: 99, baz: 250, quux: 'feather'}

console
.log(a) //=> 99
console
.log(b) //=> feather

Como isso é útil? Entre outras coisas, você pode usar apenas o que precisa da saída de uma função para ser mais prontamente a entrada de outra função.

E aqui está como você destruiria um array:

// For arrays
let [batmanPunchSound, batmanPunchStrengh] = ['boom!', 9001, 'wham!', 'zap!']

console
.log(batmanPunchSound) //=> boom!
console
.log(batmanPunchStrengh) //=> 9001

Clojure teve desestruturação disponível desde o início. Se você trocar objetos por hashmaps e arrays por vetores, a sintaxe parecerá um pouco diferente (por exemplo (let [{a :x b :z} {:x "yippee" :y "kai" :z "yay"}])), mas o mecanismo é o mesmo. Veja como funciona para mapas (hash):

; For maps
(def first-hashmap {:foo "carrot" :bar 99 :baz 250 :quux "feather"})

(let [{a :bar b :quux} first-hashmap]
(println a)
(println b))
;=> 99
;=> feather

Para vetores, o processo é semelhante ao que fizemos para matrizes Javascript:

; For vectors
(def first-vector ["boom!" 9001 "wham!" "zap!" ])

(let [[batmanPunchSound batmanPunchStrength] first-vector]
(println batmanPunchSound)
(println batmanPunchStrength))

;=> boom!
;=> 9001

No meu próximo artigo, mostrarei como usar a desestruturação em parâmetros de função (com um exemplo saboroso). Fique ligado!

Fontes:

Javascript <br>
http://exploringjs.com/es6/ch_destructuring.html
https://ponyfoo.com/articles/es6-destructuring-in-depth

Clojure <br>
http://www.john2x.com/blog/clojure-destructuring/
https://clojurebridge.github.io/community-docs/docs/clojure/destructuring/