Text
Page: 2
資料の目的
Elixir を触ってみることができる
よな気分になること
Elixir でやりたいことがあったと
き,どの辺を眺めたり探せばよ
いか,推測できるようになるこ
と
Page: 3
Elixirの特徴
Elixir の特徴 - Qiita
http://qiita.com/niku/
items/7c61d6a6af38896ac603
Page: 4
Elixirの特徴
スケールしやすさ
対障害性
関数型プログラミング
拡張しやすさと DSL
成⻑するエコシステム
対話型開発
Erlang 互換
Page: 5
ぼくがえりくさーですきなと
こ
なじみのある⽂⾯ <- [今⽇これ]
ErlangVMで処理
Page: 6
インストール
Installing Elixir - Elixir
http://elixir-lang.org/install.html
OSX
Unix
Windows
Page: 7
iexコマンド
IEx
http://elixir-lang.org/docs/
stable/iex/IEx.html
というコマンドで REPL が
使える
内で打ち間違えたとき
と打つとやりなおせ
る
Page: 8
値
Basic types - Elixir
http://elixir-lang.org/getting-
started/basic-types.html
Page: 13
Elixirの関数
Elixir では(ErlangVMでは)
で関
数を指定する
例えば は
Page: 14
関数の調べかた
の について知りたい場合
は のこと
モジュールは 関数は 引
数の数は つだから
だな
iex から とすると
ドキュメントが引ける
Page: 16
関数の調べかた
と引数の数を省略する
と, で,引数の数を問わ
ないで探す
Page: 17
関数の調べかた
web から
Elixir v1.0.4 Documentation
http://elixir-lang.org/docs/
stable/elixir/
web ⽇本語版( @k1complete さ
ん作)
elixirリファレンスのぺーじ
http://ns.maqcsa.org/elixir/
docs/
Page: 18
関数の調べかた
Elixir - iexでの⽇本語版ヘルプの使
い⽅ - Qiita
http://qiita.com/k1complete/
items/511ef32b63869bc48d0
2
h で表⽰する内容を⽇本語にもで
きるみたい(試していない)
Page: 19
整数を操作する関数
Kernel に などが
ある
Integer に などがある
Page: 22
⼩数を操作する関数
Kernel に など
がある
Float に や など
がある
Page: 25
ブーリアンを操作する関数
みつからなかった!
Page: 27
アトム
自分の名前が自分の値を表すよう
な定数.他の⾔語だとシンボルと
呼ばれるようなもの.
Page: 28
アトムを操作する関数
Atom にシンボルから⽂字列に
変換する関数がある
Page: 30
⽂字列
Binaries, strings and char lists
- Elixir
http://elixir-lang.org/getting-
started/binaries-strings-and-
char-lists.html
Elixir では “ でくくった⽂字列と
ʻ でくくった⽂字列がある
ほぼ全ての場合において “ の⽅
を利用する
Page: 32
⽂字列を操作する関数
Kernel にバイナリを操作する関
数がある
String モジュールに,UTF-8 エ
ンコードされているバイナリを
うまく扱う関数がある
Page: 34
複数の値を格納する値
Basic types - Elixir
http://elixir-lang.org/getting-
started/basic-types.html#%
28linked%29-lists
Keywords, maps and dicts -
Elixir
http://elixir-lang.org/getting-
started/maps-and-dicts.html
Page: 36
リスト
でくくる
いわゆる配列.値はなんでも,
何個でも⼊る
Page: 37
リストを操作する関数
Enum には,繰り返しについて
の関数がある
List には,List特有の関数があ
る
まず Enum を探すのがよい
Page: 39
タプル
でくくる
中に⼊る個数が決まった⼊れ物
Page: 40
タプルを操作する関数
Kernel にはタプルの値を取得す
る関数がある
Tuple にはタプル特有な関数が
ある
Page: 42
マップ
でくくる
キーと,それに対応する値を⼀
組に持ついわゆるキーバリュー
ストア
キーは重複して定義できず,上
書きされる
Page: 43
マップを操作する関数
Enum には,繰り返しについて
の関数がある
Dict には,とあるキーととある
値が関連づいているようなデー
タについての関数がある
Map には,Map 特有の関数が
Page: 45
キーワードリスト
1 つめの要素がアトム,2 つめ
の要素が任意の値になっている
タプルを持つ配列
Map とは異なり,同じ名前のキ
ーを 2 つ保持することができる
キーワード引数としての利用が
Page: 46
キーワードリストを操作する
関数
特定のユースケースで多用される
ため, Keyword モジュールにあ
る関数で処理することが多い
Enum / List / Dict 利用可能
Keyword には,キーワードリス
ト特有の処理がある
Page: 47
モジュールと関数の定義
Modules - Elixir
http://elixir-lang.org/getting-
started/modules.html
Page: 49
モジュールと関数の定義
モジュールは,関数をあるグル
ープにまとめて,探しやすくす
るためにある
自分達でモジュールを定義する
には を使う
関数の定義は を使う
Page: 50
do-endはキーワードリスト
で実装されている
case, cond and if - Elixir
http://elixir-lang.org/getting-
started/case-cond-and-
if.html#do/end-blocks
Page: 51
do-endはキーワードリスト
で実装されている
Elixir の do xxx end は do: xxx
というキーワード引数のシンタ
Page: 52
do-endはキーワードリスト
で実装されている
簡単な関数定義のときは を
1 ⾏で書くこともできる
Page: 53
|>
データに対して処理を連続して
⾏う(Rubyの場合)
オブジェクトに関係つけている
関数をオブジェクト経由で呼び
出している
Page: 54
|>
Elixir では,データに対しては関
数が関係ついていない
データに対して処理を連続して
⾏いたいときは,返り値を次の
関数へ引数として渡すことにな
る
Page: 55
|>
インライン化して変数を消すこ
とができた
処理順が上から下ではなく括弧
の内側から外側になってしまっ
Page: 56
|>
Elixirには という演算⼦があ
る
は,左(上)側の評価結果を,
右側の関数の第⼀引数へと代⼊
してくれる
Page: 57
|>
上と下の式はほとんど同じ意味
を持っている
Page: 58
|>
「subject は第⼀引数に取る」
という鉄則があるので, でデ
ータを繋いでいくことができる
自分で関数を定義するときは,
操作対象を第⼀引数に取るよう
にすると,Elixir Way に乗って
を使いやすい
Page: 60
パターンマッチング
複数の値を格納している値を,
複数の変数に結びつけることが
できる
Page: 61
パターンマッチング
Pattern matching - Elixir
http://elixir-lang.org/getting-
started/pattern-matching.html
Page: 62
⽂字へのパターンマッチング
⽂字にも同じようにパターンマ
ッチングできる
Page: 63
匿名関数
Basic types - Elixir
http://elixir-lang.org/getting-
started/basic-
types.html#anonymous-
functions
Page: 65
匿名関数
関数(今回の例だと )に
匿名関数を渡して,やりたい事
を書くときに使うことがほとん
ど
は
Page: 66
制御構造
case, cond and if - Elixir
http://elixir-lang.org/getting-
started/case-cond-and-if.html
Page: 67
制御構造
Elixir で として扱われるの
は, と だけ
Page: 68
制御構造
IF 式は返り値を持つので,結果
を変数に束縛することもできる
Page: 69
制御構造
/ 以外で分岐させた
い場合は を使う
Page: 70
制御構造
と が等しいので “x z” の⽅
を期待していた
Page: 71
制御構造
の値が変わってほしくないとい
う意思を伝える書き⽅ がある
Page: 72
制御構造
に 3 がきたときエラーでプロ
セスが落ちてしまった
Page: 73
制御構造
最後に か を使ってマッチ
Page: 74
制御構造
しかし!ErlangVM では “Let it
crash” という哲学があり,
未知の値は無理にハンドリングせ
ずに落としてしまう⽅が好まし
い.
Page: 75
制御構造
プロセスは落ちてしまう.プロセ
スが落ちるとプログラム自体が終
わる!と思うかもしれないが
ErlangVM ではプロセスが落ちて
もプログラム自体を終わらせない
⽅法が標準で用意されている.
Page: 76
制御構造
今回は取り上げないが OTP や
Supervisor について調べるとよ
い.
ひとまずここでは「予想できてい
ること,状態についてだけ扱う」
ということだけ覚えておいてほし
い.
Page: 81
制御構造
case, cond and if - Elixir
http://elixir-lang.org/getting-
started/case-cond-and-
if.html#expressions-in-guard-
clauses
という⽅法を使えば,異な
る型,例えば整数の と⼩数点
つきの数 ,⽂字列 “1” を扱
うこともできる
Page: 82
今⽇やったこと
インタラクティブシェル iex
ドキュメントの調べかた
さまざまな値と,値を操作する
関数
パイプ演算⼦ |>
パターンマッチング
制御構造
Page: 83
簡単なElixirのはじめかた
毎週⽊曜⽇にやっている
sapporo.beamで聞こう
http://sapporo-
beam.github.io/
オンライン参加も歓迎しており
ます!