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?

2 Likes

You could use one of the following libraries:



4 Likes

Look at the archives of the elixir-core mailing list. It’s been discussed and denied as a core language feature. Look to libraries or write your own macros/sigil if you really feel the need for it.

Oh those libraries are perfect @zimt28 – thanks!

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).

Seriously FP Patterns are different
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.

1 Like

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.

1 Like