Atoms
| What an atom is | |
| true false nil are atoms | |
| Aliases are atoms | |
| When atoms win |
What an atom is
An atom is a constant whose name is its value. It starts with a colon, needs no quotes, and compares by identity rather than by content.
status = :ok
is_atom(status) # gives true
Atoms never change and take almost no memory, so Elixir uses them as labels everywhere.
true false nil are atoms
The words true, false, and nil look special, but all three are plain atoms. Only their meaning in conditions sets them apart, which the next lesson covers:
is_atom(true) # gives true
is_atom(false) # gives true
is_atom(nil) # gives true
Aliases are atoms
Module aliases are atoms too, wearing a fancier spelling. Writing IO is shorthand for the atom Elixir.IO, and the runtime can prove it:
is_atom(IO) # gives true
Atom.to_string(IO) # gives "Elixir.IO"
This trick explains error messages that mention Elixir followed by a module name.
When atoms win
Atoms shine as tags on small tuples that describe an outcome. By convention, ok tuples carry a result while error tuples carry a reason:
result = {:ok, 42}
case result do
{:ok, value} -> value
{:error, _reason} -> 0
end # gives 42
Matching on the tag first keeps the happy path and the failure path side by side.
Next: Truthiness: only false and nil
Article author: Arthur Isaev