ben-pr-p

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

peerreynders

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

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.

Where Next?

Popular in Questions Top

aadeshere1
I have a another noob question about loop. Since elixir is immutable, while loop is not directly possible. total = 10 while total != 0 ...
New
beno
I will often find my self writing things similar to: case some_value do nil -> something() "" -> something() _ -> somethi...
New
siddhant3030
Hi, I have to write a raw query for one of my project. But till now I have used ecto queries and don’t have much experience writing raw ...
New
lastday4you
I wanted to check elixir version in phoenix because i found that my elixir is 1.5 but when i use Enum.chunk_by it said the function is un...
New
skosch
To my knowledge, put_in, Map.update etc. all have the one limitation of not automatically creating intermediate keys when needed (for exa...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
SoCreat
i’m a new one to elixir which editor can i use vs code? or atom? Thanks! :smiley:
New
Emily
I have VueJS GUIs with the project generated using Webpack. I have Elixir modules that will need to be used by the VueJS GUIs. I forese...
New
JorisKok
I have a server on AWS, and was running a load test using artillery. When looking at the Phoenix dashboard I see the Ports going to 100% ...
New
vonH
In asking this question I am more interested about the expressiveness of the language itself and less concerned about the availability of...
New

Other popular topics Top

9mm
I am constructing a JSON object (map) and I need to conditionally set a field. I’m trying to write proper elixir-way code… and I’m at a l...
New
sorentwo
Hello! tl;dr Announcing Oban, an Ecto based job processing library with a focus on reliability and historical observability. After spen...
985 43487 311
New
gshaw
What is the idiomatic way of matching for not nil in Elixir? E.g., First way: defp halt_if_not_signed_in(conn, signed_in_account) when...
New
Patoshizzle
After calling mix ecto.create I get this error: 17:00:32.162 [error] GenServer #PID<0.412.0> terminating ** (Postgrex.Error) FATAL...
New
jononomo
I am trying to figure out how Mix knows whether the environment is test, dev, or prod – where is this set? Thanks.
New
Fl4m3Ph03n1x
About me? ( if you have nothing better to do than reading about some random guy in the internet :stuck_out_tongue: ) Hello all, this is ...
New
stefanluptak
Hello everybody, usually, I use a 29" ultra-wide monitor for VSCode which can easily accomodate explorer (files panel) + file with code ...
New
belgoros
I’m not a pro in using Regex and can’t figure out why the following behaviour happens, especially if we take into account the difference ...
New
freewebwithme
Using vs code and installed ElixirLS: support and debugger. And I got an error popped up on start up says Failed to run ‘elixir’ comma...
New
AstonJ
We’ve put together this wiki for Phoenix LiveView - please feel free to add any info you feel is worth including. What is Phoenix LiveV...
New

Latest on Elixir Forum

Elixir Forum

We're in Beta

About us Mission Statement