はじめに
ElixirプログラマーがOTPの機能を使うとき、Erlangのドキュメントを見る必要が出てきますよね。コードサンプルなどが載って読む必要が出てくるのですが、Erlangの文法は独特です。慣れたらそれなりに読めるようになるのですが、Elixirに戻って再度見ると面食らう・・・ということを何度もやっているので、早見表的なものを作ってみました。
基本 Elixirとの比較
これだけ押さえておけば、だいたい読めます。
一番の難関(?)は、変数が大文字で始まり、アトムが小文字で始まるルールです。
ドキュメントの例文などを読む際、Elixirの感覚で変数だと思っていたものが、「変だな?」と思ったら、それはアトムだったということが多々あります。
種別 | 解説 | Erlang例 | Elixir例 |
---|---|---|---|
変数 | 大文字から始まる | MyVal | my_val |
アトム | 小文字から始まる。記号含む | ets | :ets |
マクロ | 使用時は? から始まる |
下記参照 | ← |
コメント | %% |
%% |
# |
関数呼び出し | モジュール名:ファンクション名() | math:pi() | :math.pi() |
メッセージパッシング | Pid ! Message | pid ! "hello" |
send( pid, "hello") |
関数のパターンマッチング
;
でつないで、最後.
ガード式
when以降
記号 | 役割 |
---|---|
, (カンマ)つなぎ |
論理積 |
; (セミコロン)つなぎ |
論理和 |
=:= |
左辺と右辺が同じ値ならtrue |
組み込みマクロ
機能 | Erlang | Elixir |
---|---|---|
モジュール | ?MODULE | __MODULE__ |
ファイル名 | ?FILE | __FILE__ |
行 | ?LINE | __LINE__ |
レコード 構造体
Erlang(record) | Elixir(struct) |
---|---|
#item{name="apple"} | %Struct_name{item=>"apple"} |
例
-record(product, {id,name,price}). %% productという名の構造体を定義
Apple = #item{id=431,name=apple,price=200}.
> #item{name= Name,price= Price} = Apple. %% ・・・要素を変数に束縛 / 順序に注目
#item{id = 431,name = apple,price = 200}
> Name.
apple
> is_record(Apple, item). %%・・レコード判定
true
おわりに
Erlangも読めるようになって、Elixirのパワーをより引き出しましょう。