startup-elixir

elixir メモ

elixirとは何か

シンタックスがRuby風味の関数型言語
Erlang で実装されている

http://elixir-lang.org/

https://github.com/elixir-lang/elixir

インストール

Mac OS X(Homebrew使用)の場合。

1
2
$ brew update
$ brew install elixir

基本型

この辺をざっと目を通した。
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
2
iex> 'hello' == "hello"
false

無名関数(Anonymous functions)

1
2
3
iex> add = fn a, b -> a + b end

iex> add.(2, 3)

fn end で囲む。
変数と引数の間には.が必要。

(連結)List((Linked) Lists)

いろんな型が混在しててもOK。

1
iex> [1, 2, true, 3]

リストを連結するには++ を使用する

1
2
iex> [1, 2, 3] ++ [4, 5, 6]
[1, 2, 3, 4, 5, 6]

リストの要素を取り除くには-- を使用する

1
2
iex> [1, true, 2, false, 3, true] -- [true, false]
[1, 2, 3, true]

タプル(Tuples)

値をメモリ内に連続して保持するリスト

1
2
3
4
5
6
7
8
iex> tuple = {:ok, "hello"}
{:ok, "hello"}

iex> elem(tuple, 1)
"hello"

iex> tuple_size(tuple)
2

リストとタプルの使い分け

リストは要素数が増えるとアクセスする時間が線形で増えていく。
タプルは要素数が増えてもアクセスする時間はゆるやかに増加する。
ただし、連続したメモリ内に格納するので高くつく。

以下の様に戻り値に結果と読み込みたいファイルの内容を返す場合はタプルがいいよ。

1
2
3
4
iex> File.read("path/to/existing/file")
{:ok, "... contents ..."}
iex> File.read("path/to/unknown/file")
{:error, :enoent}