Elixir 常用的資料型態,跟大部分語言差不多,特別的部分我會額外寫說明。
另外稱呼方式我盡量以中文為主,不過有的詞,如 atom 在 Elixir 台灣社群中都是直接叫 atom 比較多,講原子反而沒人聽懂,這種就使用英文。
1
200
-30
200_222 # 千位分隔符
就,整數。
可以在千位加上底線,增加可讀性,不影響程式執行
i = 1 + 2
IO.puts(i) # 印出 3
j = 3 * 10
k = 2 ** 3 # 次方運算,結果為 8
l = rem(10, 3) # 取餘數,結果為 1
有一點要注意的是
4 / 2 #=> 結果會是 2.0 而不是 2
div(4, 2) #=> 2
/
的結果一定會是浮點數,如果要維持整數的話要使用 div
函數
3.14
0.0
1.0e-10 # 科學記號
Float 模組 提供了一些專用的操作函式
Float.round(3.58) #=> 4.0
Float.round(3.58, 1) #=> 3.6 (保留一位小數)
Float.ceil(3.58) #=> 4.0 (無條件進位)
Float.floor(3.58) #=> 3.0 (無條件捨去)
真
true
假
false
is_admin = true
if is_admin do
IO.puts("是真")
else
IO.puts("是假")
end
true && false #=> false
false || true #=> true
!true #=> false
另外也有 and
, or
, not
函式使用
不過社群大部分都使用 &&
, ||
, !
nil
(空值)作用類似其他語言的 nil
, null
nil
在布林運算中視為 false
在 Elixir 中,只有兩個值在布林條件判斷被視為「假」:
false
nil
其他所有值都被視為「真」,包括:
true
0
(數字零)""
(空字串)[]
(空串列){}
(空元組)原子為名稱為其值的常數,常用在狀態描述與 Hash 的 key (鍵值)
:ok
:error
%{:name => "Jack", :age => 3}
# 在這裡 :name 與 :age 這兩個在這個 hash 當作 key 使用 (後面 hash 一並介紹)
Elixir 的模組其實也是 atom
defmodule HelloWeb.PostController do
# 這邊的 HelloWeb.PostController 型別為 atom
end
is_atom(HelloWeb.PostController) #=> true
另外 true
, false
, nil
本身也是特別的 atom
true == :true #=> true
false == :false #=> false
nil == :nil #=> true
不過正常當成 key 或是狀態來使用不需要擔心,避免使用 String.to_atom
之類的函式來動態生成 atom 即可。
字串是 UTF-8 編碼,支援各種語言和 emoji
"Hello"
"hello " <> "world!" # 合併字串
name = "Jack"
"hello #{name}" # 嵌入字串
"😀 emoji 也是"
multiline = """
這是多行字串
可以換行
也保留格式
"""
在內建的 String 模組裡可以找到操作字串需要的所有函式,例如
String.split("a,b,c", ",") #=> ["a", "b", "c"]
String.slice("elixir", 1, 3) #=> "lix"
String.trim("a abc a", "a") #=> " abc "
String.duplicate("abc", 2) #=> "abcabc"