Text
Page: 1
Techmix Hokkaido 2014 Elixir
Page: 2
発表するひと ヽ(´・⾁・`)ノ @niku̲name
Page: 3
コンサドーレ札幌アドベント カレンダー2014 http://www.adventar.org/ calendars/406
Page: 4
Elixriいつできたの? https://github.com/elixir- lang/elixir/ 最初のコミットは 3 年前 (2011-01-09)
Page: 5
誰が作りはじめたの? Jose Valim さん Ruby On Rails のコミッタ RubyKaigi2013 のキーノート http://gihyo.jp/news/report/01/ rubykaigi2013/0002
Page: 6
どんな⾔語なの? ErlangVM の上で動作する動的 な関数型⾔語 Elixirの特徴 http://qiita.com/niku/ items/7c61d6a6af38896ac603
Page: 7
いいところ ⼀般的 特徴的 親しみや すそう 普段お使 いの⾔語 + α があ る Lisp, Haskell, Erlang… Elixir, Scala
Page: 8
Elixir (僕が) したしみやすそう 便利 道具が揃ってる :: ErlangVM や Erlang のライブラリを使える 構⽂を拡張しやすい :: Lisp みたいな マクロが書ける
Page: 9
したしみ 構⽂ ツール
Page: 10
構⽂
Page: 11
ツール ユニットテストツール ExUnit インタラクティブシェル IEx ビルドツール Mix パッケージ管理ツール Hex
Page: 12
ためしてみよう
Page: 13
プロジェクト作成
Page: 14
テスト実⾏
Page: 15
挨拶を返す
挨拶(greet)を命令すると
“graaaa…” と返すようにしたい
Page: 16
テスト実⾏
まだ作ってないので失敗する
Page: 17
プロダクションコード実装
Page: 18
テスト実⾏
通った.
いつも通りに開発できる.
Page: 19
コマンドラインから使う
escript を使えばできる
エラーが!
Page: 20
エラーメッセージをよくみる (Mix) Could not generate escript, please set :main̲module in your project configuration (under option) to a module that implements main/1
Page: 21
必要なものを実装 エラーメッセージから main 関数がどのモジュールに あるかを config で指定する main/1 関数名がmainで引数が 1つの関数の用意をする が必要だとわかる
Page: 22
configで指定
Page: 23
main/1 関数の用意
Page: 24
実⾏
Page: 25
天気情報を取得する HTTP経由でAPIから天気を取得 http://weather.livedoor.com/ weather̲hacks/webservice
Page: 26
外部ライブラリの利用 HTTPアクセス するのに httpoison https://github.com/edgurgel/ httpoison JSON解析 するのに exjsx https://github.com/talentdeficit/ exjsx
Page: 27
ライブラリの利用宣⾔
Page: 28
ライブラリのダウンロード
Page: 29
インタラクティブシェル IEX
動作を確認するのに使う
Page: 30
ライブラリも試せる
Page: 31
ここまで ふつうです ^q^
Page: 32
ここから ふつうではありません ^q^
Page: 33
ErlangVM由来のふつうでは ないこと プロセスをたくさんつくれる 分散させやすい 耐障害性が⾼い
Page: 34
プロセスをたくさんつくれる https://gist.github.com/ niku/7301933
Page: 35
プロセスをたくさんつくれる
Page: 36
同時に100万個⽣成
Macbook Proで9秒
Page: 37
分散させやすい
Page: 38
耐障害性が⾼い (省略) ⼒不⾜により簡単なサンプルを用 意できませんでした
Page: 39
Elixir独自のふつうではない こと マクロ! Elixirでメタプログラミングする のに使う
Page: 40
マクロ? 書いてあるコードを実⾏し始める 前に書き換える
Page: 41
どんなことができるの? たとえば IF 式が作れます
Page: 42
myif を作ってみる
Page: 43
myif を作ってみる 評価対象(trueかfalseになる) true のときにやること false のときにやること
Page: 44
JavaScriptでmyif
よさそう
Page: 45
Javascriptでmyif
Page: 46
Javascriptでmyif
あれ……
Page: 47
Javascriptでmyif
myifの結果を返すときではなく,
myifに引数を渡すときに評価され
てしまう
Page: 48
Javascriptでmyif
渡すときにfunctionにしておけ
ば,結果を返すときに評価してく
れる
Page: 49
Javascriptでmyif 引数に渡すときのfunctionを無 くすことはできないのか? =>引数に渡ってくる内容を functionとして,引数を受けと るときには評価しないようにで きないの? JavaScriptでのやり⽅を知らな い……
Page: 50
奥がふかいif いつも使っているやつなのに,思 ったよりたくさんの要素がある
Page: 51
Elixirでmyif 関数でやると,JavaScriptと同 じ悩みにあたる マクロ!
Page: 52
Elixirでmyif
Page: 53
Elixirでmyif
実⾏結果
なんだこれは……
Page: 54
Elixirでmyif
http://elixir-lang.org/
getting̲started/meta/1.html
Elixir の⽂献によると
3要素のくみあわせになっている
Page: 55
Elixirでmyif ⼀番目の要素はアトムかタプ ル.タプルの場合はこの構造と 同じになっている ⼆番目の要素はメタデータ.⾏ 数とか⽂脈が書いてある. 三番目の要素はアトムか関数呼 び出しの引数.アトムの場合, このひとかたまりタプルは変数 である.
Page: 56
Elixirでmyif
IO.inspect(clause)のなかみ
Page: 57
Elixirでmyif
1 番目のタプルのなかみ
Page: 58
Elixirでmyif 以下略.たしかにそのようにな っているようだ. これなんなの? => AST(抽象構 ⽂⽊)です ASTってなんなの?プログラム の構造をプログラムで表したも のです
Page: 59
Elixirでmyif
とりあえず忘れてください.
IO.inspect の出⼒が最後に出てく
ることに注目
Page: 60
Elixirでmyif IO.inspect の出⼒が最後に出て くる つまり引数で受けたときにはま だ評価されていない
Page: 61
Elxiirでmyif
Page: 62
Elxiirでmyif できた マクロは慣れていない⼈類には 早すぎる感
Page: 63
Elixirでmyif Never use a macro when you can use a function – Programming Elixir
Page: 64
まとめ ライブラリを使う⼈には現代的 でしたしみやすい ライブラリを作る⼈にはほとん どなんでもできる
Page: 65
宣伝 毎週だいたい⽊曜⽇にErlangVM に関すること(Elixir含む)や,そ うではないことをワイワイやる Sapporo.beamをやってます 前回は⾼級トイレットペーパー のはなしやこの資料の作成をし てました