パターンマッチ
■概要
パターンマッチとはElixirの機能の一つで、
マッチ演算子とピン演算子を使用します。
■マッチ演算子
マッチ演算子は左辺値と右辺値のパターンをマッチ(等しく)するために使用する演算子です。
記号は「=」を使用しますが、C++やJavaなどの言語の代入演算子とは異なる部分があるので注意して下さい。
●書式
・書式例
値 = 値
※値はリテラルだけではなく、タプル、リスト、関数などデータ構造を含む
あらゆる値を指します。
・具体例①
iex> x = 1
上の例では変数xと1の値に対してマッチ演算子を使っています。
この時Elixirは2つの値をマッチさせる方法としてxを1として扱うことで、
マッチを成功させます。
その結果として以下のようにこれ以降ではxは1として扱われます。
・例
iex> x = 1
1
iex> x
1
・具体例②
iex> x = 1
1
iex> 1 = x
1
左辺の値にリテラルな値を使用することもできます。
この時のマッチが成功するケースは右辺が1の場合のみです。
リテラルな値は変数とは違い変更ができないので、マッチさせるためには
左辺と同じ値にするしかありません。
以下のように左辺の値が異なるとエラーになります。
・例
iex> x = 2
2
iex> 1 = x
** (MatchError) no match of right hand side value: 2
・具体例③
iex> x = 1
1
iex> y = 2
2
iex> x = y
2
iex> x
2
iex> y
2
左辺と右辺の値の両方に変数を使用することもできます。
この場合、右辺の変数を左辺の変数にマッチさせる方法を探すことになるので、
左辺の変数の値が右辺の変数の値に設定されます。
●再定義
具体例③でも行っていますが、同じ変数に対して再度マッチを行った場合、
新しい変数として再定義されますので実質的に変数に対しての値変更を行うことができます。
ただし、あくまで同じ変数名の変数を再定義しているので、同じ変数の値を変更していない
点については覚えておいてください。
・例
iex> x = 1
1
iex> x
1
iex> x = 2
2
iex> x
2