Comment on ES6 in Depth: DestructuringComments−thomasvarney72311yI recognize destructuring from Clojure. Did it origniate there? Or is this a specific case of pattern matching?−bshimmin11yOther languages have this too, eg. Ruby: a, b = [1, 2] a, b = {:a => 1, :b => 2} Similarly in Python, at least for the array example (there's probably some way of destructuring a dictionary in Python, but I don't know it myself).PHP also has `list()`...−petepete11yFor arrays, yes, but that won't work for Ruby hashes (which aren't ordered): [1] pry ~ » a, b = {a: 1, b: 2} { :a => 1, :b => 2 } [2] pry ~ » a { :a => 1, :b => 2 } [3] pry ~ » b nil−bshimmin11yYou're quite right, I meant to add `values_at` in the hash example! And the syntax is still not so nice: irb(main):005:0> a, b = {:a => 1, :b => 2}.values_at(:a, :b) => [1, 2] Or: irb(main):006:0> a, b = (h = {:a => 1, :b => 2}).values_at(*h.keys) => [1, 2] Edit: Ruby's hashes are ordered since 1.9, incidentally.−petepete11ya, b = {a: 1, b: 2}.values−nahiluhmot11yCommon Lisp also has destructuring-bind[0], although its not provided with every implementation.[0] https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node252.html−nbouscal11yIt's basically just pattern matching. Similar things have been around since at least the 70s (e.g. in SASL).−btbuildem11yErlang and Python have destructuring as well - it's a pretty established shorthand.
Comments
I recognize destructuring from Clojure. Did it origniate there? Or is this a specific case of pattern matching?
Other languages have this too, eg. Ruby:
Similarly in Python, at least for the array example (there's probably some way of destructuring a dictionary in Python, but I don't know it myself).PHP also has `list()`...
For arrays, yes, but that won't work for Ruby hashes (which aren't ordered):
You're quite right, I meant to add `values_at` in the hash example! And the syntax is still not so nice:
Or: Edit: Ruby's hashes are ordered since 1.9, incidentally.a, b = {a: 1, b: 2}.values
Common Lisp also has destructuring-bind[0], although its not provided with every implementation.
[0] https://www.cs.cmu.edu/Groups/AI/html/cltl/clm/node252.html
It's basically just pattern matching. Similar things have been around since at least the 70s (e.g. in SASL).
Erlang and Python have destructuring as well - it's a pretty established shorthand.