プログラミング初心者用 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というわけです。