Upgrade to Pro — share decks privately, control downloads, hide ads and more …

関数型でGoFのデザインパターンやってみる

52604f94a6d2172df2cad5ab45189940?s=47 ponday
September 06, 2019

 関数型でGoFのデザインパターンやってみる

こわくない関数型プログラミング勉強会@福岡 #2(2019/09/06)の発表資料です。

52604f94a6d2172df2cad5ab45189940?s=128

ponday

September 06, 2019
Tweet

Transcript

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


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


  3. 前回のイベントにて


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


  5. やってみる


  6. 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

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


  8. 例:Stateパターン


  9. 例:Stateパターン


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


  11. 例:Builderパターン


  12. 例:Builderパターン


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


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


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


  16. 高階関数
 - 関数を引数、戻り値で使う関数のこと
 - map / filter / reduce など


    - 処理の移譲などに使う

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


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


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


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


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


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


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


  24. まとめ
 - GoFはOOPについてのデザインパターン
 - 関数型プログラミングでも有効というわけではない 
 - 実現できない or 余計なものもある

    
 - 関数型プログラミングでは高階関数と部分適用を多用する
 - 処理の分岐や移譲は高階関数で実現 

  25. さいごにちょっと 宣伝


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


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