首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Erlang 核心語法速查:Guard、List Comprehension、Pattern Match 與常用 BIF

     編輯:Java 相關知識

前言

本文整理 Erlang 開發中高頻使用的語法特性與內建函數(BIF),涵蓋 Guard 序列、List Comprehension、Timer、gb_trees/gb_sets、Pattern Match、List 操作、Fold、Zip 與進制表示,適合作為開發時的速查手冊。

Guard 序列

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 內不能呼叫自定義函數,因為無法保證無副作用。

List Comprehension(列表推導)

Erlang 最強大的語法糖之一,語法:

[ Expression || Generators, Guards, Generators, ... ]
  • 建立新列表
  • 映射轉換列表
  • 過濾元素

原則:凡涉及列表操作,優先考慮 List Comprehension,能大幅減少代碼量。

Timer 模組

% 指定時間後發送訊息給自己
erlang:send_after(token_lifetime(), self(), renew_token).

% 固定間隔週期性執行函數
{ok, TRef} = timer:apply_interval(Interval, ?MODULE, announce, [self()]).

gb_trees / gb_sets

通用平衡樹實作的有序字典/集合,適合需有序遍歷、範圍查詢的場景,效能優於 dict/sets。

Pattern Match(模式匹配)

Case 多值匹配

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().

List 基本操作

% 新增元素
[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 深入學習各模組細節。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved