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での部分的な関数型プログラミング
  2. M3, Inc. Jun Tomioka Twitter: @jooohn1234 Github: jooohn Love: Our

    very first baby Had great paternity leave! エムスリー株式会社の富岡純です。好きなものは第一子です。育休を 取得していました。
  3. 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. 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. There are 2 types of FP techniques • For a

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

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

    What we’ve found 私達の「部分的な関数型プログラミング」について、基本的な戦略と、 やってみてわかったことについて話します。
  8. 2: Find out parts that don’t depend on effects 2:

    作用に依存しない部分を見つけます。
  9. 4: Still has side effects? It’s OK! It’s better! 4:

    まだ作用が残っていますが、良しとしましょう。前よりはマシです。
  10. 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. 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. 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. 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. 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