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

Partially applied Functional Programming in Scala

Partially applied Functional Programming in Scala

ScalaMatsuri2018

Jun Tomioka

March 17, 2018
Tweet

More Decks by Jun Tomioka

Other Decks in Technology

Transcript

  1. Partially applied
    Functional Programming in Scala
    Jun Tomioka (M3, inc.)
    Scalaでの部分的な関数型プログラミング

    View full-size slide

  2. M3, Inc.
    Jun Tomioka
    Twitter: @jooohn1234
    Github: jooohn
    Love: Our very first baby
    Had great paternity leave!
    エムスリー株式会社の富岡純です。好きなものは第一子です。育休を
    取得していました。

    View full-size slide

  3. エムスリー株式会社は、インターネットというメディアを活用し、医療の
    世界を変革します。

    View full-size slide

  4. What is “Functional Programming”?
    関数型プログラミングとは?

    View full-size slide

  5. What is “Functional Programming”?
    ● “We construct our programs using only
    pure functions”
    ○ Functions without side effects
    ● Benefits:
    ○ Increase modularity
    ○ Easier to test, reuse, parallelize, generalize,
    and reason about
    「純粋関数だけでプログラムを組み立てる」ことを前提とすることで、テ
    ストしやすいなどの様々な恩恵を受けられます。

    View full-size slide

  6. we construct our programs
    using ONLY PURE FUNCTIONS
    「純粋関数だけでプログラムを組み立てる」

    View full-size slide

  7. ONLY PURE
    FUNCTIONS
    「純粋関数だけ」

    View full-size slide

  8. Using ONLY pure functions is powerful, but...
    ● Should we:
    ○ give up existing awesome but impure
    libraries?
    ○ re-implement entire project?
    ● Can’t ignore its learning cost
    「だけ」というのは強力ですが、非純粋な依存ライブラリをどうするか、
    学習コストが馬鹿にならない等の問題があります。

    View full-size slide

  9. There are 2 types of FP techniques
    ● For a pure program
    ○ val, immutable, ...
    ● For a effectful program
    ○ IO, Free, ...
    世の中には2種類の関数型プログラミングのテクニックがあります。純
    粋なプログラムのためのものと、作用を扱うものです。

    View full-size slide

  10. There are 2 types of FP techniques
    ● For a pure program <- EASY
    ○ val, immutable, ...
    ● For a effectful program <- HARD
    ○ IO, Free, …
    前者に比べて、後者は比較的難しいと思っています。

    View full-size slide

  11. Let’s start with FP
    for a pure program
    なので、純粋なプログラムのための関数型プログラミングから始めま
    しょう。

    View full-size slide

  12. Partially applied Functional Programming for us
    ● Basic strategy
    ● What we’ve found
    私達の「部分的な関数型プログラミング」について、基本的な戦略と、
    やってみてわかったことについて話します。

    View full-size slide

  13. Basic strategy
    基本的な戦略について話します。

    View full-size slide

  14. 1: Recognize inevitable effects
    1: 避けられない作用を認識します。

    View full-size slide

  15. 1: Recognize inevitable effects
    1: 避けられない作用を認識します。

    View full-size slide

  16. 2: Find out parts that don’t depend on effects
    2: 作用に依存しない部分を見つけます。

    View full-size slide

  17. 3: Extract them as pure functions
    3: その部分を純粋関数として抜き出します。

    View full-size slide

  18. 4: Still has side effects? It’s OK! It’s better!
    4: まだ作用が残っていますが、良しとしましょう。前よりはマシです。

    View full-size slide

  19. What we’ve found
    私達が発見したことについて話します。

    View full-size slide

  20. 2 layers appeared
    ● Pure layer
    ○ Independent pure package
    ■ Consists of pure components
    ■ FP world. Easy to test, reuse, etc.
    ○ FP libraries are heavily used here
    ■ e.g. Cats
    2つの層が浮き彫りになりました。1つは純粋層です。独立した純粋な
    パッケージで、関数型の恩恵を受けることができます。

    View full-size slide

  21. 2 layers appeared
    ● Effectful layer
    ○ Treats DB access and other effects.
    ○ Depends on the pure layer
    ○ Most dependent libraries are used here
    ■ e.g. scalikejdbc
    もう1つは作用層で、DBアクセスなどの作用が実行されます。純粋層
    に依存してロジックを実現します。

    View full-size slide

  22. Dependency direction
    依存の方向です。作用層は純粋層に依存しますが、逆はありません。
    Effectful layer Pure layer
    The effectful layer depends on the pure layer, the
    opposite is not true.

    View full-size slide

  23. Looks like this
    Effectful layer
    Depends on the pure layer
    こんな感じです。

    View full-size slide

  24. The pure layer has another aspect
    ● Represents our core business rules
    ○ Removal of effects emphasizes our core
    business rules
    ○ Of course, they’re all easy to test, reuse, ...
    ● We’ve started to focus on “What is our core
    business rule” as well as “What is pure”
    また純粋層は、作用を取り除いた結果、核となるビジネスルールを表
    現するようになりました。関数型のメリットは残したまま。

    View full-size slide

  25. Looks like the core business logic, doesn’t it?
    この純粋関数の部分は、FizzBuzzの核となるビジネスロジックに見え
    ますよね。

    View full-size slide

  26. The next step
    ● Need to treat core business effects?
    ○ It might be time to graduate “Partially
    applied”, and start the original FP.
    ○ Suit your project!
    事業のコアとなる作用を扱いたくなったら?関数型の部分適用は卒業
    して、本来の関数型を始めるときかもしれません。

    View full-size slide

  27. Recap
    まとめです。

    View full-size slide

  28. Recap
    ● It’s beneficial to apply FP partially.
    ● Extract pure methods, and you’ll find it’s your
    core business rules.
    References
    関数型を部分的に適用するのも有用です。純粋関数を抽出すると、そ
    れが核となるビジネスロジックだと気付きます。
    ● Functional Programming in Scala
    ● The Clean Architecture

    View full-size slide

  29. Thanks for listening!
    ご静聴ありがとうございました!

    View full-size slide