JavaScript TypeScript カリーによって引数を減らすメリット 事例
例えば、以下のような数値を更新する関数があるとします。
const increment = (num: number) => num + 1
const double = (num: number) => num * 2
const updateByType = (num: number, type : 0 | 1) => type === 0 ? num + 1 : num + 2
ある値に対して、これらの関数を順番に適用して値を更新したいとします。
const currentType = 1
let init = 1
init = increment(init)
init = double(init)
init = updateByType(init, currentType)
init // 6
さてこれでも良いのですが、initという変数を削除し、関数型プログラミングの考えで、関数の配列を順番に適用する方法を考えてみます。
const updateFns = [
increment,
double,
updateByType,
]
updateFns.reduce((acc, fn) => {
return fn(acc)
}, 1)
reduceを使うとできるのですが、ここで問題になるのがupdateByTypeだけ引数が二つのために、上のコードではエラーになるのです。
そこで、カリー化して引数を一つに統一します。
全体のコードは以下です。
const increment = (num: number) => num + 1
const double = (num: number) => num * 2
// カリー化
const updateByType = (type: 0 | 1) => (num: number) => type === 0 ? num + 1 : num + 2
const currentType: 0 | 1 = 1
const updateFns = [
increment,
double,
updateByType(currentType),
]
updateFns.reduce((acc, fn) => {
return fn(acc)
}, 1)
//6
最近のコメント