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

75086cfa4a46d4aa47deb38b409bd9cd?s=128

Jun Tomioka

March 17, 2018
Tweet

Transcript

  1. Partially applied Functional Programming in Scala Jun Tomioka (M3, inc.)

    Scalaでの部分的な関数型プログラミング
  2. M3, Inc. Jun Tomioka Twitter: @jooohn1234 Github: jooohn Love: Our

    very first baby Had great paternity leave! エムスリー株式会社の富岡純です。好きなものは第一子です。育休を 取得していました。
  3. エムスリー株式会社は、インターネットというメディアを活用し、医療の 世界を変革します。

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

  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 「純粋関数だけでプログラムを組み立てる」ことを前提とすることで、テ ストしやすいなどの様々な恩恵を受けられます。
  6. we construct our programs using ONLY PURE FUNCTIONS 「純粋関数だけでプログラムを組み立てる」

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

  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 「だけ」というのは強力ですが、非純粋な依存ライブラリをどうするか、 学習コストが馬鹿にならない等の問題があります。
  9. There are 2 types of FP techniques • For a

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

    pure program <- EASY ◦ val, immutable, ... • For a effectful program <- HARD ◦ IO, Free, … 前者に比べて、後者は比較的難しいと思っています。
  11. Let’s start with FP for a pure program なので、純粋なプログラムのための関数型プログラミングから始めま しょう。

  12. Partially applied Functional Programming for us • Basic strategy •

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

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

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

  16. 2: Find out parts that don’t depend on effects 2:

    作用に依存しない部分を見つけます。
  17. 3: Extract them as pure functions 3: その部分を純粋関数として抜き出します。

  18. 4: Still has side effects? It’s OK! It’s better! 4:

    まだ作用が残っていますが、良しとしましょう。前よりはマシです。
  19. What we’ve found 私達が発見したことについて話します。

  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つは純粋層です。独立した純粋な パッケージで、関数型の恩恵を受けることができます。
  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アクセスなどの作用が実行されます。純粋層 に依存してロジックを実現します。
  22. Dependency direction 依存の方向です。作用層は純粋層に依存しますが、逆はありません。 Effectful layer Pure layer The effectful layer

    depends on the pure layer, the opposite is not true.
  23. Looks like this Effectful layer Depends on the pure layer

    こんな感じです。
  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” また純粋層は、作用を取り除いた結果、核となるビジネスルールを表 現するようになりました。関数型のメリットは残したまま。
  25. Looks like the core business logic, doesn’t it? この純粋関数の部分は、FizzBuzzの核となるビジネスロジックに見え ますよね。

  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! 事業のコアとなる作用を扱いたくなったら?関数型の部分適用は卒業 して、本来の関数型を始めるときかもしれません。
  27. Recap まとめです。

  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
  29. Thanks for listening! ご静聴ありがとうございました!