iT邦幫忙

2025 iThome 鐵人賽

DAY 2
0

Elixir 常用的資料型態,跟大部分語言差不多,特別的部分我會額外寫說明。

另外稱呼方式我盡量以中文為主,不過有的詞,如 atom 在 Elixir 台灣社群中都是直接叫 atom 比較多,講原子反而沒人聽懂,這種就使用英文。

基本型態

整數 (integer)

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 函數

浮點數 (float)

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 (無條件捨去)

布林值 (boolean)

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(數字零)
  • ""(空字串)
  • [](空串列)
  • {}(空元組)

Atom (原子)

原子為名稱為其值的常數,常用在狀態描述與 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

Note: atom 有上限

不過正常當成 key 或是狀態來使用不需要擔心,避免使用 String.to_atom 之類的函式來動態生成 atom 即可。

字串 (string)

字串是 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"

上一篇
Elixir 基本語法,看完這一篇就懂五成
下一篇
過一遍常用的複合型態 - List
系列文
通勤看手機就可讀懂的 Elixir 語言入門教學4
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言