ben-pr-p
Struct creation / pattern matching short hand
One of my favorite new ES6 features in Javascript was the object literal shorthand, where:
const { location, venue_name } = { location: [30.2391, -99.1301], venue_name: "The Club" }
console.log(location) // [30.2391, -99.1301]
console.log(venue_name) // The Club
Additionally, I could do:
const extra_property = "some additional info"
const obj = { location, venue_name, extra_property }
But in Elixir, I find myself doing lots of
%{location: location, venue_name: venue_name} = struct
// process location and venue_name somehow
new_struct = %{location: location, venue_name: venue_name, extra_property: extra_property}
Is there any way in Elixir to do that similar struct desctructuring / creation shorthand (any way I can avoid typing venue_name twice), or how would I request it as a feature of the language in future iterations?
Most Liked
zimt28
You could use one of the following libraries:
https://github.com/danielberkompas/destructure
https://github.com/meyercm/shorter_maps
https://github.com/whatyouhide/short_maps
peerreynders
Smartass answer #1:
- use tuples
Smartass answer #2:
-
The universal FP answer - write/use a (factory) function - e.g.:
.new_struct = MyStruct.new location, venue_name, extra_property
Sorry, I couldn’t help myself (obviously).
Rebuttal
PS: There was a time where JavaScript was most hated for not being some other language one would much rather be working in. But I guess that was at a time where it was rare that anybody would learn to program in JavaScript first.
DianaOlympos
This should be another thread probably but that rebuttal is soooooo missing the point. But that is because it mix Design Pattern with architecture, which is a classic problem.
Popular in Questions
Other popular topics
Categories:
Sub Categories:
Forums
Popular Tags
- #ecto
- #liveview
- #troubleshooting
- #learning-elixir
- #deployment
- #library
- #erlang
- #testing
- #genserver
- #mix
- #absinthe
- #remote-other
- #otp
- #plug
- #how-to-question
- #macros
- #postgres
- #channels
- #elixirconf
- #exunit
- #discussion
- #code-sync
- #javascript
- #podcasts
- #onsite
- #dialyzer
- #docker
- #authentication
- #umbrella
- #full-time-contract
- #podcasts-by-brainlid
- #ecto-query
- #elixir-ls
- #phoenix_html
- #iex
- #blog-post
- #graphql
- #genstage
- #ai
- #websockets
- #supervisor
- #advent-of-code
- #elixirconf-us
- #distillery
- #processes
- #forms
- #api
- #metaprogramming
- #security
- #performance










