$30 off During Our Annual Pro Sale. View Details »

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

ponday
September 06, 2019

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

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

ponday

September 06, 2019
Tweet

More Decks by ponday

Other Decks in Programming

Transcript

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

    こわくない関数型プログラミング勉強会@福岡 #2 / Sep 5th, 2019 ponday (@ponday_dev)


    View Slide

  2. Profile

    - ponday (Honda, Yusuke)

    - フロントエンド好き

    - 副業もやってます


    View Slide

  3. 前回のイベントにて


    View Slide

  4. GoFのデザインパターンを関数型で書いたら

    どうなりますか?


    View Slide

  5. やってみる


    View Slide

  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


    View Slide

  7. State / Strategy

    - 持つべき振る舞いをinterfaceに定義

    - interfaceを実装して実際の振る舞いを作成

    - インスタンスを差し替えて動作を切り替え


    View Slide

  8. 例:Stateパターン


    View Slide

  9. 例:Stateパターン


    View Slide

  10. Builder

    - インスタンスの操作を担うBuilderをinterfaceとして定義

    - Builderを実装して具体的な方法を定義

    - DirectorはBuilderを使ったインスタンスの構築方法を定義


    View Slide

  11. 例:Builderパターン


    View Slide

  12. 例:Builderパターン


    View Slide

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


    View Slide

  14. そもそもGoFのデザパタは OOP向け

    (不要なものも...)


    View Slide

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


    View Slide

  16. 高階関数

    - 関数を引数、戻り値で使う関数のこと

    - map / filter / reduce など

    - 処理の移譲などに使う


    View Slide

  17. 部分適用

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


    View Slide

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


    View Slide

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

    高階関数


    View Slide

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

    部分適用


    View Slide

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


    View Slide

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


    View Slide

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


    View Slide

  24. まとめ

    - GoFはOOPについてのデザインパターン

    - 関数型プログラミングでも有効というわけではない

    - 実現できない or 余計なものもある

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

    - 処理の分岐や移譲は高階関数で実現

    View Slide

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


    View Slide

  26. 9/22の技術書典7で関数型プログラミングの本出します

    ↓他新刊(自社有志による執筆)


    View Slide

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

    View Slide