This post works best when paired with the Elixir docs for a general overview of Tuples.
What is an Elixir Tuple?
It is a collection data type in Elixir defined using curly brackets {}
When should you use a Tuple?
As response objects. The most often take the form of {:ok, response_data_1, response_data_2}
or {:error, message}
.
Should you use a Tuple to store a collection of application data you want to iterate over?
No you should use a List
. Writing and performing operations on a collection in Elixir was designed to be handled using lists.
How do you add an element to an existing Tuple?
One way is to use the Kernel
put_elem/3
function. The example below takes a Tuple
, an index in that Tuple
, and a new value for that index and creates a new Tuple
.
=> put_elem({:ok, "fish", "penguin"}, 1, "lobster")
{:ok, "lobster", "penguin"}
What happens when you try to use put_elem/3 with a non-existing index?
An ArgumentError
is raised.
=> put_elem({:ok, "fish", "penguin"}, 3, "lobster")
** (ArgumentError) argument error
How do you retrieve an element from a Tuple without pattern matching?
Using the Kernel
elem/2
function and passing it the tuple and the index of the value you want to get.
=> aqua_friends = {:ok, "fish", "penguin"}
=> elem(aqua_friends, 1)
"fish"
How do you retrieve an element from a Tuple through pattern matching?
By using Elixirs match operator =
to destructure the tuple. See the example below:
=> {:ok, diet, animal} = {:ok, "fish", "penguin"}
=> diet
"fish"
=> animal
"penguin"
How do you remove an element from a Tuple?
Using the Tuple
delete_at/2
function and passing it the tuple and the index of the value you want to remove.
=> Tuple.delete_at({:ok, "lobster", "penguin"}, 2)
{:ok, "lobster"}
More Elixir Decks: