Next.js + サーバーサイドTypeScript + 関数フレーバーでクリーンなアプリを作ったので実装意図とか書く Advent Calendar 2022
の6日目。株式会社mofmofに生息しているshwldです。
前日は型で状態を表現するについて書きました。
関数の合成
クラスを使わずにドメインモデルを書くことに決めたのですが、そうなると関数型の流儀みたいなものを使いたくなります。
とはいえ、あまり関数型の流儀に自分自身が慣れていないのと、理解しきれていないので、少しづつ取り入れることにしました。
関数を組み合わせて処理を書く際に普通に書くとこうなります。
function sum(a, b) {
return a + b
}
function addTax(kane) {
return kane * 1.1
}
addTax(sum(10, 20))
2つとかならいいのですが、たくさんの関数を使おうとすると
e(d(c(b(a()))))
つらそう!!!
ここは、よくあるメソッドチェーンみたいに書きたいものです。
price.add(20).addTax()
みたいに!
なので、pipeを使いました。
const sum = (a) => (b) => a + b;
pipe(10, sum(20), addTax);
だいぶ近い。良いでしょう。
ということで、これを実現するために fp-tsの pipe
というのを使っています。
次回予告
明日はEither型を使ってエラーを扱うについて書きます