elixir – 評価と束縛

代入

PHPやJavaScriptなどのC言語ゆかりの言語だと、通常、以下の式は、変数aに1を代入するという意味になる。

aに1を入れる、という意味になる。

tmp00012

そして評価や、数学で言うイコールは、プログラミングでは ===== を使う。

上記は、もしaが数値型で、中身が1だったら(という評価)、コンソールに1と表示する、という意味になる。

PHPやJavaScriptなどでは、==は単純に左辺と右辺を比較してる。===は左辺と右辺の内容と型が一致してるかまで比較する。

束縛

そしてelixirでは変数に値を代入はしない。

aの中に1を入れる という感じではなく、aと1を関連付ける というニュアンスになる。

tmp00013

aが1に束縛する、という感じ。

評価してみる

1を評価したらそりゃ1だわな。

ではまずはaと1を束縛する。

次はこのa(の束縛先)を表示してみる。

当然1が表示される。

そして、変数の中身と1を比較して見る。

つまり、1とaの中身は一緒ということになる。

2とaの中身は一致しないので、エラーになる。

JavaScriptでは以下のようにして評価する。

elixirでは、単純に = を使って結果を得ることができる。

左辺と右辺を逆に書いても良さそうだけど、この場合は先ほどからやってるように、束縛になる。

aが1に束縛された。

ちなみに変数の再束縛は可能。

tmp00014

結論

つまり注意する点は2つ。

= は他の言語とは使い方が違う

elixirでは = は代入演算子ではなく、マッチ演算子。
つまり左辺と右辺を評価するわけだ。

例外が一つあって、変数が左辺にあるときだけ束縛になる、と。

代入せずに束縛する

変数に値を入れずに、値と関連付ける。

おわり

次回はピン演算子をやろうかな。