プログラミング初心者用 Ramdaのcomposeで関数を合成してみる
Ramdaとは
JavaScriptのライブラリです。
composeとは
関数を合成します。
例えば以下のような二つの関数がすでにあるとします。
// 二つの値を足す
const add = (a, b) => a + b
// 2倍する
const double = (a) => a * 2
二つの値を加算してからそれを2倍する処理が書きたくなったとします。
composeを使うと以下のように実現できます。
const myFunc = compose(double, add);
console.log(myFunc(2, 3)); // (2 + 3) * 2 = 10
引数の後ろから順番に実行されます。
つまり、add(2, 3) が実行されて 5 が return され、double(5) が実行されて 10 が return されます。
add で return した値がそのまま double の引数になるということです。
別の例
文字列の単語数をカウントする処理を書きたいとします。
すでに、文字列をスペースで区切って分割する(配列にする)関数と、配列の長さを取得する関数を定義したので、あとはこれらを組み合わせるだけです。
const str = "Hello tamibouz and hito-chan"
// スペースで区切る
const devideWord = (str) => str.split(' ')
// 配列の長さを取得する
const count = (arr) => arr.length
// 合成する
const countWord = compose(count, devideWord)
console.log(countWord(str)) // 4
何が嬉しいのか
どちらの処理も書こうと思えば一つの関数で書くことができます。
しかし、「二つの値を足す」や、「文字列をスペースで分割する」という処理は、他でも使えそうな汎用的な処理です。
そのため、上記のように小さな関数として定義しておくと再利用ができます。
再利用ができるということは、何か変更があった際にその関数だけ修正すれば良いので、修正漏れがなくなりバグが減ります。
小さな関数を定義していく場合、それらを組み合わせてより大きな関数を作る必要がでてきます。
その時に便利なのがcomposeというわけです。
最近のコメント