Rabbit Slide Show

OSC 2015 Hokkaido Elixir

2015-06-13

Description

2015-06-13 OSC Hokkaido 2015 で発表する [プログラミング言語 Elxiir](https://www.ospn.jp/osc2015-do/modules/eguide/event.php?eid=37) の資料

Text

Page: 1

プログラミング⾔
語Elixir

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: 9

Page: 10

整数
                  
                  
               
                  
                
                
                
                

Page: 11

整数
                 
                  
                 
                  
                   
                 
                 

Page: 12

整数
         
                        
                        
                        
         
                        
                        
                        

Page: 13

Elixirの関数
Elixir では(ErlangVMでは)   
              で関
数を指定する
例えば                   は 
            

Page: 14

関数の調べかた
      の   について知りたい場合
      は                のこと
モジュールは        関数は   引
数の数は   つだから            
だな
iex から              とすると
ドキュメントが引ける

Page: 15

関数の調べかた
                    
                                          
                
                                                
        
            
   

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: 20

⼩数
               
               
                  
                  
                
                
                
                

Page: 21

⼩数
                           
                              
                            
                         
                         

Page: 22

⼩数を操作する関数
Kernel に                 など
がある
Float に        や        など
がある

Page: 23

ブーリアン
               
               
               
                     
                
                
                
                

Page: 24

ブーリアン
               
                
                

Page: 25

ブーリアンを操作する関数
みつからなかった!

Page: 26

アトム
               
               
               
                  
                   
                
                
                

Page: 27

アトム
自分の名前が自分の値を表すよう
な定数.他の⾔語だとシンボルと
呼ばれるようなもの.
                          
                                
               
                          
                          

Page: 28

アトムを操作する関数
Atom にシンボルから⽂字列に
変換する関数がある

Page: 29

⽂字列
               
               
               
                  
                
                   
                
                

Page: 30

⽂字列
Binaries, strings and char lists 
- Elixir
http://elixir-lang.org/getting-
started/binaries-strings-and-
char-lists.html
Elixir では “ でくくった⽂字列と 
ʻ でくくった⽂字列がある
ほぼ全ての場合において “ の⽅
を利用する

Page: 31

⽂字列
                                     
                                  
                                           
                          
                                    

Page: 32

⽂字列を操作する関数
                           
                           
                             
Kernel にバイナリを操作する関
数がある
String モジュールに,UTF-8 エ
ンコードされているバイナリを
うまく扱う関数がある

Page: 33

複数の値を格納する値
               
               
               
                  
                
                
                   
                   

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: 35

複数の値を格納する値
                                    
                                 
                                 
                
                
                                      

Page: 36

リスト
                               
                                    
                                      
   でくくる
いわゆる配列.値はなんでも,
何個でも⼊る

Page: 37

リストを操作する関数
                                                    
                                            
Enum には,繰り返しについて
の関数がある
List には,List特有の関数があ
る
まず Enum を探すのがよい

Page: 38

タプル
                                 
                                    
                                 
                
                
                                      

Page: 39

タプル
                            
                                    
   でくくる
中に⼊る個数が決まった⼊れ物

Page: 40

タプルを操作する関数
                                            
                                                   
Kernel にはタプルの値を取得す
る関数がある
Tuple にはタプル特有な関数が
ある

Page: 41

マップ
                                 
                                 
                                    
                
                
                                      

Page: 42

マップ
                                               
                                               
                                               
    でくくる
キーと,それに対応する値を⼀
組に持ついわゆるキーバリュー
ストア
キーは重複して定義できず,上
書きされる

Page: 43

マップを操作する関数
                                                              
                                                                        
                                                             
Enum には,繰り返しについて
の関数がある
Dict には,とあるキーととある
値が関連づいているようなデー
タについての関数がある
Map には,Map 特有の関数が

Page: 44

キーワードリスト
                                 
                                 
                                 
                
                
                                         

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: 48

モジュールと関数の定義
                      
                   
         
     
                    
         
     
   
                            
                            

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: 59

束縛
     
               
        
                  
       
        
                  
       

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: 64

匿名関数
                           
                 

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: 77

制御構造
     
     
                       
                       
                       
                      
                       
            
             

Page: 78

制御構造
     
                  
                                     
                                            
                                                        
             
             

Page: 79

制御構造
       
                  
                                     
                                            
                                                        
             
             

Page: 80

制御構造
       
                  
                                     
                                            
                                                        
             
             

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/
オンライン参加も歓迎しており
ます!

Other slides