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/