Elixir
nixで触る
$ nix-shell -p elixir
確認$ elixir --version
$ mix --version
学ぶ
学習系まとめサイト
Haskellのghciみたいなやつ
> h hoge
で関数 hoge
の説明が見れる
> i 123
で値についての情報を表示する
> c "hoge.exs"
でファイルを読み込む
もしくは $ iex hoge.exs
で読み込んで起動
$ iex -S mix
コンパイルしてプロジェクトをiexで起動
実行
コンパイルせずに実行
$ elixir hoge.exs
コンパイルして実行
$ elixirc hoge.ex
プロジェクト作成
$ mix new hogehoge
テスト実行
$ mix test

13章
Elixirのbuild tool
パッケージマネージャ
jsのnpmみたいなもの

p.138に書いている
mix.exs
のdepsに使いたいライブラリを追記する
$ mix deps
で確認
$ mix deps.get
でダウンロード
Elixirのパターンマッチ
コアに近いところの話
疑問
@default_count 4
ってなに
↓これの x
はなんで :x
ではないのか
見分け方
exfb = fn
0, 0, _ -> "FizzBuzz"
0, _, _ -> "Fizz"
_, 0, _ -> "Buzz"
_, _, x -> x
end
以下の |>
で繋がれた関数はシェルの |
のように並列に実行される
ex defmodule Parallel do
def pmap(collection, func) do
collection
|> Enum.map(&(Task.async(fn -> func. (&1) end)))
|> Enum.map(&Task.await/1)
end
end
パターンマッチで条件分岐することで、パイプラインでもきれいに書ける
特徴
並列分散、高可用性
動的型付け
Rubyライクな文法
マクロでメタプログラミング
プロトコル
拡張子
2種類あり、以下のような慣習がある
.ex
コンパイルすファイル
.exs
コンパイルせずに実行するファイル
s
は「script」のs
Elixirのドキュメンタリー
Protocol