猫でもわかるWebプログラミングと副業

本業エンジニアリングマネージャー。副業Webエンジニア。Web開発のヒントや、副業、日常生活のことを書きます。

【ScalaMatsuri2018】Scalaでの部分的な関数型プログラミング

もくじ

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

自己紹介

じょん (@jooohn1234) | Twitter

エムスリー株式会社

インターネットを活用し医療を革変する

関数型プログラミングとは

  • 純粋関数だけを使う
    • 純粋関数=副作用のない関数

本当に純粋関数だけでプログラミングできんの?

純粋関数だけというのは強力だけど学習コスト高い

関数型プログラミング

IOとかを純粋関数にするのは難しい。

printlnとかは副作用がある!でもこれは純粋関数で表現しようとするとむずい。

部分的な関数型プログラミング

簡単に純粋関数プログラミングできることだけをやる

2レイヤーに分ける

  • 副作用ありな部分
    • DBアクセスなどIOなど...
  • 副作用なしな部分

2レイヤーの依存関係

純粋な層とは

  • 純粋な層がコアなビジネスロジックになる
    • テストしやすい
    • 再利用しやすい
  • DDDでいうとdomainレイヤーのことだなぁ

結局

  • 最初は「純粋な関数型レイヤーとはなにか」を考えていた
  • 実装していくうちに「コアなビジネスロジックは何か」を考えればいいとわかってきた。

今後

  • 副作用がある部分が「コアなビジネスロジック」になるかもしれない?
  • その時にはDBアクセスとかIOとかを純粋関数で表現する必要が出てくる?

参考