本文整理 Erlang 開發中高頻使用的語法特性與內建函數(BIF),涵蓋 Guard 序列、List Comprehension、Timer、gb_trees/gb_sets、Pattern Match、List 操作、Fold、Zip 與進制表示,適合作為開發時的速查手冊。
Guard 用於子句頭或 case/if/receive 中,只能包含無副作用的運算。
% 逗號 = AND,分號 = OR
guard(X, Y) when not(X > Y), is_atom(X) -> X + Y.
% List Comprehension 中做過濾
NewNodes = [Node || Node <- AllNodes, not gb_sets:is_member(Node, NewQueried)].
限制:Guard 內不能呼叫自定義函數,因為無法保證無副作用。
Erlang 最強大的語法糖之一,語法:
[ Expression || Generators, Guards, Generators, ... ]
原則:凡涉及列表操作,優先考慮 List Comprehension,能大幅減少代碼量。
% 指定時間後發送訊息給自己
erlang:send_after(token_lifetime(), self(), renew_token).
% 固定間隔週期性執行函數
{ok, TRef} = timer:apply_interval(Interval, ?MODULE, announce, [self()]).
通用平衡樹實作的有序字典/集合,適合需有序遍歷、範圍查詢的場景,效能優於 dict/sets。
A = 1, B = 2,
case {A, B} of
{_C, _C} -> true; % 兩值相等
{_, _} -> false % 其他
end.
比邏輯運算子組合更清晰。
% 確保 IP 是 4 元組
ping({_, _, _, _} = IP, Port) -> ok.
% 類似 C/C++ assert,盡早失敗
{ok, Ret} = call().
% 新增元素
[2] ++ [3, 4]. % 尾部拼接,O(N)
[2 | [3, 4]]. % 頭部插入,O(1),推薦
% foldl / foldr:累加器模式
lists:foldl(fun(X, Sum) -> X + Sum end, 0, [1,2,3,4,5]). % 15
% zip:兩兩配對成 Tuple 列表
lists:zip([1,2,3], [4,5,6]). % [{1,4},{2,5},{3,6}]
16#FF. % 16 進位 255
2#1010. % 2 進位 10
通用格式:Base#Number
掌握上述核心語法與 BIF,能讓 Erlang 代碼更簡潔、更符合函數式風格,並充分發揮 BEAM VM 的並發優勢。建議搭配官方文件 erlang --doc 深入學習各模組細節。