12/08/2018, 16:22

Tìm hiểu ngôn ngữ Elixir

Giới thiệu Elixir là ngôn ngữ hướng chức năng được phát triển trên nền tảng Erlang. Chính vì chạy trên Erlang Virtual Machine nên Elixir có hiệu suất cực kì cao. Các ứng dụng được phát triển bằng Elixir có thể chạy hàng trăm nghìn process chỉ trên cùng một server, tận dụng tối đa ưu thế của ...

Giới thiệu

Elixir là ngôn ngữ hướng chức năng được phát triển trên nền tảng Erlang. Chính vì chạy trên Erlang Virtual Machine nên Elixir có hiệu suất cực kì cao. Các ứng dụng được phát triển bằng Elixir có thể chạy hàng trăm nghìn process chỉ trên cùng một server, tận dụng tối đa ưu thế của phần cứng máy tính. Tuy nhiên Elixir lại có cú pháp dể đọc và dể hiểu hơn nhiều so với Erlang. Nhiều người cho rằng, Elixir là "Ruby for Erlang". Cộng đồng Ruby trên thế giới đang chuyển dần sự chú ý sang ngôn ngữ này. Vậy nó có gì hot? Chúng ta cùng tìm hiểu nào!

Cách cài đặt

OSX

Việc cài đặt rất đơn giản khi sử dụng Homebrew:

~ brew update
~ brew install erlang
~ brew install elixir

Khi cài đặt thành công, bạn có thể chạy dòng lệnh dưới để kiểm tra:

~ elixir -v
> Elixir 1.0.2

Ubuntu

  1. Thêm Erlang Solutions repo:
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
  1. Chạy:
sudo apt-get update
  1. Cài Erlang và các platforms cần thiết:
sudo apt-get install esl-erlang
  1. Cài Elixir:
sudo apt-get install elixir

Với các hệ điều hành khác

Bạn có thể tham khảo thêm tại đây.

Cơ bản về Elixir

Tương tự như irb của Ruby, Elixir cung cấp cho chúng ta 1 bộ REPL iex

> iex

Biến:

iex(1)> name = "rbin"
#=> "rbin"

Atoms

Trong Elixir, mỗi Atom là một hằng số mà tên cũng chính là giá trị của nó.

iex(2)> :this_is_an_atom
#=> :this_is_an_atom
iex(3)> :my_atom == :atom
#=> false

Tuples:

Chúng ta dùng cặp ngoặc nhọn để định nghĩa Tuples. Trong Elixir, Tuples được lưu trực tiếp trong bộ nhớ, chính vậy, khi lấy size của Tuple hay truy cập các phần tử của nó cực nhanh, tuy nhiên việc cập nhật hay thêm phần tử yêu cầu phải copy toàn bộ tuple trong bộ nhớ.

iex(4)> tuple = {:hello, "world"}
#=> {:hello, "world"}
iex(5)> elem(tuple, 1)
#=> "world"

Lists:

List cũng đc lưu trong bộ nhớ, có thể chèn hoặc nối thêm các phần tử:

iex(8)> list = [1, 2, :atom]
#=> [1, 2, :atom]
iex(9)> ["string"] ++ list
#=> ["string", 1, 2, :atom]
iex(10)> list ++ [31]
#=> [1, 2, :atom, 31]

Có nhiều hàm rất hữu dụng khi làm việc với list, bao gồm cả việc lấy "Head & Tail":

iex(11)> hd(list)
#=> 1
iex(12)> tl(list)
#=> [2, :atom]

Anonymous Functions

Trong Elixir, ta có thể truyền funtions như các đối số đến các fuctions khác. Ở bên dưới, chúng ta định nghĩa 1 biến add chứa 1 function, sau đó truyền nó như 1 đối số đến is_function.

iex(14)> add = fn a, b -> a + b end
#Function<12.90072148/2 in :erl_eval.expr/5>

iex(15)> add.(13, 31)
#=> 44

iex(16)> is_function(add)
#=> true

Tổ chức projects với Mix

Mix là một công cụ siêu hữu dụng cho phép chúng ta dễ dàng tạo ra, tổ chức, biên dịch và test project. Để khởi tạo 1 project mới với Mix, chỉ cần chạy lệnh đơn giản:

mix new myapp --module MyApp

Lệnh này sẽ khởi tạo 1 thư mục mới tên myapp với vài files bên trong. Đồng thời cũng định nghĩa 1 module MyApp trong lib/myapp.ex.

* creating README.md
* creating .gitignore
* creating mix.exs
* creating config
* creating config/config.exs
* creating lib
* creating lib/myapp.ex
* creating test
* creating test/test_helper.exs
* creating test/myapp_test.exs

Your mix project was created successfully.
You can use mix to compile it, test it, and more:
cd myapp
mix test

Chúng ta đã có các file cần thiết cho cấu trúc 1 dự án cơ bản. File mix.exs là file chứa các config chính của dự án, và quản lý các gói phụ thuộc. Chúng ta có test/folder, có thể viết test như Ruby             </div>
            
            <div class=

0