Getting Started with Elixir Programming Language
2017-05-15
2331 words
11 mins read
If you have been reading blog posts, hacker news threads, your favorite developers tweets or listening to podcasts, at this point you’ve probably heard about the Elixir programming language. The language was created by José Valim, a well known developer in the open-source world. You may know him from the Ruby on Rails MVC framework or from devise and simple_form ruby gems him and his co-workers from the Plataformatec have been working on in the last few years.
According the José Valim, Elixir was born in 2011. He had the idea to build the new language due the lack of good tools to solve the concurrency problems in the ruby world. At that time, after spending time studying concurrency and distributed focused languages, he found two languages that he liked, Erlang and Clojure which run in the JVM. He liked everything he saw in the Erlang language (Erlang VM) and he hated the things he didn’t see, like polymorphism, metaprogramming and language extendability attributes which Clojure was good at. So, Elixir was born with that in mind, to have an alternative for Clojure and a dynamic language which runs in the Erlang Virtual Machine with good extendability support.
Elixir describes itself as a dynamic, functional language with immutable state and an actor based approach to concurrency designed for building scalable and maintainable applications with a simple, modern and tidy syntax. The language runs in the Erlang Virtual Machine, a battle proof, high-performance and distributed virtual machine known for its low latency and fault tolerance characteristics.
Before we see some code, it’s worth saying that Elixir has been accepted by the community which is growing. If you want to learn Elixir today you will easily find books, libraries, conferences, meetups, podcasts, blog posts, newsletters and all sorts of learning sources out there as well as it was accepted by the Erlang creators.
Let’s see some code!
Install Elixir:
Installing Elixir is super easy in all major platforms and is an one-liner in most of them.
Arch Linux
Elixir is available on Arch Linux through the official repositories:
1
pacman -S elixir
Ubuntu
Installing Elixir in Ubuntu is a bit tidious. But it is easy enough nonetheless.
1
2
3
4
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
apt-get update
apt-get install esl-erlang
apt-get install elixir
OS X
Install Elixir in OS X using Homebrew.
1
brew install elixir
Meet IEx
After the installation is completed, it’s time to open your shell. You will spend a lot of time in your shell if you want to develop in Elixir.
Elixir’s interactive shell or IEx is a REPL – (Read Evaluate Print Loop) where you can explore Elixir. You can input expressions there and they will be evaluated giving you immediate feedback. Keep in mind that your code is truly evaluated and not compiled, so make sure not to run profiling nor benchmarks in the shell.
The Break Command
There’s an important thing you need to know before you start the IEx RELP – how to exit it.
You’re probably used to hitting
1
|
to close the programs running in the terminal. If you hit
1
|
in the IEx RELP, you will open up the Break Menu. Once in the break menu, you can hit
1
|
again to quit the shell as well as pressing
1
|
.
I’m not going to dive into the break menu functions. But, let’s see a few IEx helpers!
Helpers
IEx provides a bunch of helpers, in order to list all of them type:
1
|
.
And this is what you should see:
Those are some of my favorites, I think they will be yours as well.
-
1
<td> <div class="text codecolorer"> h </div> </td> </tr>
as we just saw, this function will print the helper message.
-
1
<td> <div class="text codecolorer"> h/1 </div> </td> </tr>
which is the same function, but now it expects one argument.
For instance, whenever you want to see the documentation of the
1
|
1
|
method you can easily do:
Probably the second most useful IEx helper you’re going to use while programming in Elixir is the
<div class="codecolorer-container text solarized-light" style="overflow:auto;white-space:nowrap;width:550px;">
<table cellspacing="0" cellpadding="0">
<tr>
<td class="line-numbers">
<div>
1<br />
</div>
</td>
<td>
<div class="text codecolorer">
c/2
</div>
</td>
</tr>
</table>
</div>
, which compiles a given elixir file (or a list) and expects as a second parameter a path to write the compiled files to.
Let’s say you are working in one of the http://exercism.io/ Elixir exersices, the Anagram exercise.
So you have implemented the
<div class="codecolorer-container text solarized-light" style="overflow:auto;white-space:nowrap;width:550px;">
<table cellspacing="0" cellpadding="0">
<tr>
<td class="line-numbers">
<div>
1<br />
</div>
</td>
<td>
<div class="text codecolorer">
Anagram
</div>
</td>
</tr>
</table>
</div>
module, which has the method
<div class="codecolorer-container text solarized-light" style="overflow:auto;white-space:nowrap;width:550px;">
<table cellspacing="0" cellpadding="0">
<tr>
<td class="line-numbers">
<div>
1<br />
</div>
</td>
<td>
<div class="text codecolorer">
match/2
</div>
</td>
</tr>
</table>
</div>
in the anagram.exs file. As the good [developer][1] you are, you have written a few specs to make sure everything works as expected as well.
This is how your current directory looks:
Now, in order to run your tests against the Anagram module you need to run/compile the tests.
As you just saw, in order to compile a file, simply invoke the
<div class="codecolorer-container text solarized-light" style="overflow:auto;white-space:nowrap;width:550px;">
<table cellspacing="0" cellpadding="0">
<tr>
<td class="line-numbers">
<div>
1<br />
</div>
</td>
<td>
<div class="text codecolorer">
elixir
</div>
</td>
</tr>
</table>
</div>
executable passing as argument path to the file you want to compile.
Now let’s say you want to run the IEx REPL with the Anagram module accessible in the session context. There are two commonly used options. The first is you can require the file by using the options
<div class="codecolorer-container text solarized-light" style="overflow:auto;white-space:nowrap;width:550px;">
<table cellspacing="0" cellpadding="0">
<tr>
<td class="line-numbers">
<div>
1<br />
</div>
</td>
<td>
<div class="text codecolorer">
-r
</div>
</td>
</tr>
</table>
</div>
, something like
<div class="codecolorer-container text solarized-light" style="overflow:auto;white-space:nowrap;width:550px;">
<table cellspacing="0" cellpadding="0">
<tr>
<td class="line-numbers">
<div>
1<br />
</div>
</td>
<td>
<div class="text codecolorer">
iex -r anagram.exs
</div>
</td>
</tr>
</table>
</div>
. The second one, you can compile right from the IEx session.
Simple, just like that!
Ok, what about if you want to recompile a module? Should you exit the IEx, run it again and compile the file again? Nope! If you have a good memory, you will remember that when we listed all the helpers available in the IEx RELP, we saw something about a recompile command. Let’s see how it works.
Notice that this time, you passed as an argument the module itself and not the file path.
As we saw, IEx has a bunch of other useful helpers that will help you learn and understand better how an Elixir program works.
## Basics of Elixir Types {#basics-of-elixir-types}
### Numbers {#numbers}
There are two types of numbers. Arbitrary sized integers and floating points numbers.
#### Integers {#integers}
Integers can be written in the decimal base, hexadecimal, octal and binary.
As in [Ruby][2], you can use underscore to separate groups of three digits when writing large numbers. For instance you could right a hundred million like this:
<pre><div class="codecolorer-container text solarized-light language-elixir" style="overflow:auto;white-space:nowrap;width:550px;">
1
|
Octal:
<pre><div class="codecolorer-container text solarized-light language-elixir" style="overflow:auto;white-space:nowrap;width:550px;">
1
|
Hexdecimal:
<pre><div class="codecolorer-container text solarized-light language-elixir" style="overflow:auto;white-space:nowrap;width:550px;">
1
|