Slide 1

Slide 1 text

関数型でデザインパターンやってみる
 こわくない関数型プログラミング勉強会@福岡 #2 / Sep 5th, 2019 ponday (@ponday_dev)


Slide 2

Slide 2 text

Profile
 - ponday (Honda, Yusuke)
 - フロントエンド好き
 - 副業もやってます


Slide 3

Slide 3 text

前回のイベントにて


Slide 4

Slide 4 text

GoFのデザインパターンを関数型で書いたら
 どうなりますか?


Slide 5

Slide 5 text

やってみる


Slide 6

Slide 6 text

GoFのデザインパターン
 - Abstract Factory
 - Adapter
 - Bridge
 - Builder
 - Chain of Responsibility 
 - Command
 - Composite
 - Decorator
 - Facade
 - Factory Method
 - Flyweight
 - Interceptor
 - Iterator
 - Mediator
 - Memento
 - Observer
 - Prototype
 - Proxy
 - Singleton
 - State
 - Strategy
 - Template Method
 - Visitor


Slide 7

Slide 7 text

State / Strategy
 - 持つべき振る舞いをinterfaceに定義
 - interfaceを実装して実際の振る舞いを作成
 - インスタンスを差し替えて動作を切り替え


Slide 8

Slide 8 text

例:Stateパターン


Slide 9

Slide 9 text

例:Stateパターン


Slide 10

Slide 10 text

Builder
 - インスタンスの操作を担うBuilderをinterfaceとして定義
 - Builderを実装して具体的な方法を定義
 - DirectorはBuilderを使ったインスタンスの構築方法を定義


Slide 11

Slide 11 text

例:Builderパターン


Slide 12

Slide 12 text

例:Builderパターン


Slide 13

Slide 13 text

似たような処理は書けるけど......


Slide 14

Slide 14 text

そもそもGoFのデザパタは OOP向け
 (不要なものも...)


Slide 15

Slide 15 text

関数型プログラミングでは、 高階関数 と 部分適用 を多用する


Slide 16

Slide 16 text

高階関数
 - 関数を引数、戻り値で使う関数のこと
 - map / filter / reduce など
 - 処理の移譲などに使う


Slide 17

Slide 17 text

部分適用
 - 関数の引数の一部をあらかじめ固定する処理


Slide 18

Slide 18 text

例:高階関数と部分適用


Slide 19

Slide 19 text

例:高階関数と部分適用
 高階関数


Slide 20

Slide 20 text

例:高階関数と部分適用
 部分適用


Slide 21

Slide 21 text

例:高階関数と部分適用


Slide 22

Slide 22 text

例:高階関数と部分適用(パターン2)


Slide 23

Slide 23 text

例:高階関数と部分適用(パターン2)


Slide 24

Slide 24 text

まとめ
 - GoFはOOPについてのデザインパターン
 - 関数型プログラミングでも有効というわけではない 
 - 実現できない or 余計なものもある 
 - 関数型プログラミングでは高階関数と部分適用を多用する
 - 処理の分岐や移譲は高階関数で実現 


Slide 25

Slide 25 text

さいごにちょっと 宣伝


Slide 26

Slide 26 text

9/22の技術書典7で関数型プログラミングの本出します 
 ↓他新刊(自社有志による執筆)


Slide 27

Slide 27 text

https://frontend-conf.fukuoka.jp/