
AstonJ
Do you say 'unpack' or 'destructure'?
Consider this Erlang code:
Rectangle = {rectangle, 20, 10}.
{rectangle, Width, Height} = Rectangle.
> Width.
20
> Height.
10
When I was watching an Elixir video the person kept calling this ‘destructuring’ (which I think is what they say in the JS world?) but Joe Armstrong, in his book Programming Erlang, calls this ‘unpacking’ - so I am curious, how do you refer to it when using a BEAM language?
- Unpack
- Destructure
- Use the terms interchangeably depending on the language
- Something else - please say in thread!
0 voters
Most Liked

chriseyre2000
Technically it’s pattern matching since we can be more specific by repeating a variable to ensure that it is used in multiple places.

Eiji
Object :
typeof instance === "object"
. Special non-data but Structural type for any constructed object instance also used as data structures: newObject
, newArray
, newMap
, newSet
, newWeakMap
, newWeakSet
, newDate
and almost everything made with new keyword;Source: JavaScript data types and data structures - JavaScript | MDN
This quote shows us that equivalent/similar data types across languages are implemented and therefore grouped differently which means that we can’t use exactly same naming. Different naming forces new developer to think: Why it's named like that?
and that ends up with looking for it’s definition.
The destructuring assignment syntax is a JavaScript expression that makes it possible to unpack values from arrays, or properties from objects, into distinct variables.
Having in mind that both destructure
and unpack
are used only for arrays
and objects
it’s confusing to use them in Elixir
for other data types like for example string
. Destructure
naming could also be confusing for newbies as we have structs
.
Destructure
and unpack
antonyms suggest that we have something structured
or packed
which is not always true. While it’s common to say that we are unpacking bits from string
still we can’t say that we are unpacking
something from literal
like for example: 5 = variable
.
Generally i.e. for all data types I prefer to think about some connection of assignment
, fetch
, pattern
and take
words (which are most common) like taking by pattern
or something like that.
@AstonJ Considering your Erlang
code we can say that we are taking
items: rectangle
, Width
and Height
by 3-element tuple pattern of Rectangle
variable. What do you think about it?
Popular Backend topics










Other popular topics










Latest in Backend
Latest (all)
Categories:
Popular Portals
- /elixir
- /rust
- /wasm
- /ruby
- /erlang
- /phoenix
- /keyboards
- /js
- /rails
- /python
- /security
- /go
- /swift
- /vim
- /clojure
- /java
- /haskell
- /emacs
- /svelte
- /onivim
- /typescript
- /crystal
- /c-plus-plus
- /tailwind
- /kotlin
- /gleam
- /react
- /flutter
- /elm
- /ocaml
- /vscode
- /opensuse
- /ash
- /centos
- /php
- /deepseek
- /scala
- /zig
- /html
- /debian
- /nixos
- /lisp
- /agda
- /sublime-text
- /textmate
- /react-native
- /kubuntu
- /arch-linux
- /revery
- /ubuntu
- /manjaro
- /django
- /spring
- /diversity
- /nodejs
- /lua
- /julia
- /slackware
- /c
- /neovim