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