Partially applied Functional Programming in Scala

Partially applied Functional Programming in Scala

ScalaMatsuri2018

75086cfa4a46d4aa47deb38b409bd9cd?s=128

Jun Tomioka

March 17, 2018
Tweet

Transcript

  1. 1.

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

    Scalaでの部分的な関数型プログラミング
  2. 2.

    M3, Inc. Jun Tomioka Twitter: @jooohn1234 Github: jooohn Love: Our

    very first baby Had great paternity leave! エムスリー株式会社の富岡純です。好きなものは第一子です。育休を 取得していました。
  3. 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 「純粋関数だけでプログラムを組み立てる」ことを前提とすることで、テ ストしやすいなどの様々な恩恵を受けられます。
  4. 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 「だけ」というのは強力ですが、非純粋な依存ライブラリをどうするか、 学習コストが馬鹿にならない等の問題があります。
  5. 9.

    There are 2 types of FP techniques • For a

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

    There are 2 types of FP techniques • For a

    pure program <- EASY ◦ val, immutable, ... • For a effectful program <- HARD ◦ IO, Free, … 前者に比べて、後者は比較的難しいと思っています。
  7. 12.

    Partially applied Functional Programming for us • Basic strategy •

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

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

    作用に依存しない部分を見つけます。
  9. 18.

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

    まだ作用が残っていますが、良しとしましょう。前よりはマシです。
  10. 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つは純粋層です。独立した純粋な パッケージで、関数型の恩恵を受けることができます。
  11. 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アクセスなどの作用が実行されます。純粋層 に依存してロジックを実現します。
  12. 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” また純粋層は、作用を取り除いた結果、核となるビジネスルールを表 現するようになりました。関数型のメリットは残したまま。
  13. 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! 事業のコアとなる作用を扱いたくなったら?関数型の部分適用は卒業 して、本来の関数型を始めるときかもしれません。
  14. 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