elixir メモ
elixirとは何か
シンタックスがRuby風味の関数型言語
Erlang で実装されている
https://github.com/elixir-lang/elixir
インストール
Mac OS X(Homebrew使用)の場合。
1 | $ brew update |
基本型
この辺をざっと目を通した。
http://elixir-lang.org/getting-started/basic-types.html
iex
1 | iex |
ターミナルでiex
と入力すると対話型のインタプリタが立ち上がる。
Ruby のirb 相当する。
help
h
コマンドを叩くh
の後に調べたい関数などを入力する
関数の後に引数の数を /1 という形で指定する
1 | h is_boolean/1 |
Atoms
Ruby で言うところのsymbols: に相当する。
名前に相当する値を持つ。
先頭にはa-Zと_ しか指定できない。
http://elixir-lang.org/getting-started/basic-types.html#atoms
Strings
日本語も使える。
二重クォート(“”)で囲む。
シングルクォートだと文字のListになるので以下はfalse
になる。
1 | iex> 'hello' == "hello" |
無名関数(Anonymous functions)
1 | iex> add = fn a, b -> a + b end |
fn
end
で囲む。
変数と引数の間には.
が必要。
(連結)List((Linked) Lists)
いろんな型が混在しててもOK。1
iex> [1, 2, true, 3]
リストを連結するには++
を使用する1
2iex> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6]
リストの要素を取り除くには--
を使用する1
2iex> [1, true, 2, false, 3, true] -- [true, false]
[1, 2, 3, true]
タプル(Tuples)
値をメモリ内に連続して保持するリスト
1 | iex> tuple = {:ok, "hello"} |
リストとタプルの使い分け
リストは要素数が増えるとアクセスする時間が線形で増えていく。
タプルは要素数が増えてもアクセスする時間はゆるやかに増加する。
ただし、連続したメモリ内に格納するので高くつく。
以下の様に戻り値に結果と読み込みたいファイルの内容を返す場合はタプルがいいよ。
1 | iex> File.read("path/to/existing/file") |