Elixir 的官網 這樣寫道: Elixir is a dynamic,
functional language for building scalable and maintainable applications.
但我認為 Elixir 是個簡單的語言,別被 functional 嚇到了。
剛入門的時候我們可以先不需要擔心 Elixir 的進階、底層甚至核心部分,
暫時專注在語法上就可以了。
除了 mix 之外,Elixir 還內建了 iex 可以讓我們即時執行 Elixir 程式碼
在終端機中輸入 iex
進入 iex,我們可以看到如下
Erlang/OTP 26 [erts-14.0.2] [source] [64-bit] [smp:10:10] [ds:10:10:10] [async-threads:1] [jit]
Interactive Elixir (1.15.4) - press Ctrl+C to exit (type h() ENTER for help)
iex(1)>
我們可以在 iex(1)>
後輸入我們的 Elixir 程式碼,按下 Enter 之後就會執行
IO.puts "Hello World"
這篇的所有範例都可以在 iex 中執行
介紹幾個我們常用的資料型別,基本的型別與其他語言相差不大,快速看過一次即可
加減乘除範例,要注意除法會自動轉成 Float
5 + 2 #=> 7
5 - 2 #=> 3
5 * 2 #=> 10
5 / 2 #=> 2.5
(#
後面的內容為程式碼註解 這邊使用 `#=>`` 來代表 IEX 的回傳值)
另外有提供 rem
與 div
來取 Integer 的餘數與商
rem(5, 2) #=> 1
div(5, 2) #=> 2
Float 的範例
5 + 2.3 #=> 7.3
布林值寫成小寫的 true
與 false
true #=> true
false #=> false
運算
true and true #=> true
true && true #=> true 通常會寫這個
true or false #=> true
true || false #=> true 通常會寫這個
not true #=> false
!true #=> false 通常會寫這個
Atom 是代表自己的常數,在有的語言叫做 Symbol
:hello #=> :hello
:world #=> :world
另外,布林值的 true
與 false
其實也是 Atom
true == :true #=> true
is_atom(true) #=> true
任何大寫開頭的字串都會被轉成 Atom,通常用在模組名稱,後面在介紹 function
時會提到。
雖然可以但平常不會這樣用
is_atom(Hello) #=> true
Elixir 的 String 使用雙括號
"Hello World"
"可以使用 Emoji 🙃"
"你好" #=> "你好"
Elixir 也支援字串內插入 Elixir 程式碼,使用 #{}
"5 的平方是 #{5**2}" #=> "5 的平方是 25"
name = "Jack"
"Hello #{name}" #=> "Hello Jack"
有字串相加用的特殊語法,使用 <>
"Hello " <> "World" #=> "Hello World"
使用 []
與 ,
來組成 list,內容可以是不同型別
[1, 2, 3] #=> [1, 2, 3]
[1, "Hello", true] #=> [1, "Hello", true]
可以使用 ++
或 --
來合併或相減兩個 list
[1, 2, 3] ++ [4, 5] #=> [1, 2, 3, 4, 5]
[1, 2, 3] -- [2] #=> [1, 3]
使用 {}
與 ,
來組成 tuple,內容可以是不同型別
{1, 2, 3}
大部分的時候,通常像是列出所有的使用者這種情況,會使用 List
["Jack", "Mary", "John"]
在我們的教學中,會使用 Tuple 的時候通常是 function 的回傳值,像是
{:ok, "蘋果"}
{:error, "錯誤訊息"}
官網的
lists-or-tuples
裡面有比較正確且詳細的說明組成與使用時機,但是在這邊先不用擔心太多。
鍵值組合的首要選擇,使用 %{}
與 =>
來組成 map,內容可以是不同型別
%{"name" => "Jack", "age" => 18}
如果鍵值都是 Atom,可以使用 :
來簡化,
%{:name => "Jack"}
可以寫成 %{name: "Jack"}
並能用 .
來取值
user = %{name: "Jack", age: 18}
user.name #=> "Jack"
list 與 tuple 的組合 [{key, value}]
, 與 Map 的差別在於,key 一定是
Atom,且可以重複
[{:name, "Jack"}, {:age, 18}]
並可以簡化成
[name: "Jack", age: 18]
通常用在 function 的 option 參數上