より長続きするブログ

続けていきたい気持ち。

プログラミングElixir読書メモ

今日買いに行ってきた。
関数型言語は一種類くらい、何となく使えるレベルで理解しておきたいと思っていたものの、手を付けられないまま時間が経っていた。
そんなところに、今月Elixirの良書が翻訳されたと話題になっていたので、これに乗じて読んでみようと思った次第。

そして、Elixirは仕事ですぐに使えたりはしないと思うので、アウトプットとして読書メモだけでも書いておこうと決めて、これを書いている。

 

以下、章ごとのメモ (逐次更新できればいいな)

 

第1章 赤いカプセルをとれ

イントロダクションの章。

インストール方法

Ubuntu16.04LTSにインストールした。
Ubuntu 12.04 and 14.04 / Debian 7」の部分の通りにやれば問題なかった。
wget https://packages.erlang-solutions.com/erlang-solutions_1.0_all.deb && sudo dpkg -i erlang-solutions_1.0_all.deb
sudo apt update
sudo apt install esl-erlang elixir 
 

実行

iexの使用例が載っている。インストールが完了できているので、そのまま実行できた。
iexのヘルパー関数の解説。便利そう。
カスタマイズもできるみたいだけど、今のところは手を付けず。
 

コンパイルと実行

Elixirのコードファイルは拡張子の2種類ある。
コンパイルして実行するものは.ex, ソースレベルで解釈・実行するものは.exs。
具体的な使い分けとしては、アプリケーションコードは.exとし、テストコードは.exsを使うらしい。
(テストのコンパイル済みコードを置いておく必要はないため)
 
ここでHelloWorldするので、超簡単にコーディング環境を作った。
普段使っているAtomlanguage-elixirautocomplete-elixirをインストールした。
パッケージ検索すると、色々便利なのがありそうなので、探ると楽しそう。
 
サンプルのhelloworld.exsを作って、
elixirコマンドでも、iex内からでも実行できることを確認した。
 

Think Different(ly)

プログラミングについての考え方を変えるとのこと。
 
 
 

第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 # エラー!
 
最初は、初回の変数の表明時にピン演算子を使って、変更不可にするのかと思ったけどそうではなかった。一度表明した変数に対してピン演算子を使って、以前の値を束縛する。