より長続きするブログ

続けていきたい気持ち。

プログラミングElixir読書メモ 第2章

第2章 パターンマッチ

「あなたの考える代入は、私の考える代入ではない」

 Elixirにおける等号はマッチ演算子であって、いわゆる「代入」じゃない。

左辺と右辺が同じものであるという「表明」のようなもの。

 

マッチ演算子(=)

マッチ演算子によってパターンマッチを行い、マッチすれば表明が成功し、

マッチしなければ表明できずエラーになる。

 

同じ構造をもっていれば、= で結ぶとパターンマッチにより両辺を同じにできる。

 

変数に値がセットされたら、そのパターンマッチ中では変更不可能。

次のパターンマッチでは変更OK。例としては以下の様な感じ。

a = 1 # OK

1 = a # OK

2 = a # エラー

a = 2 # OK

 

アンダースコア(_)

アンダースコア(_)はパターンマッチの中のワイルドカード

変数として値を補足しなくていいなら、これを使うと良い。

[1, _, _] = [1, 2, 3] # OK

 

ピン演算子(^)

Elixirでは変数の束縛の期限が短くて、次のマッチのときには新しい値に束縛し直せる(Erlangではできないみたい)。

現在の変数の値でパターンマッチをしたい場合には、ピン演算子(^)を使う。

a = 1 # OK

a = 2 # OK

^a = 1 # エラー!

 

最初は、初回の変数の表明時にピン演算子を使って、変更不可にするのかと思ったけどそうではなかった。一度表明した変数に対してピン演算子を使って、以前の値を束縛する。