JSで関数柯李化を実現

関数の複数の引数を、単一引数を受け取る関数の系列に変換するのは、関数のカリー化と呼ばれるテクニックであり、JavaScript では以下のように実装されています。

  1. クロージャーの使用:すべての引数を受け取る外部関数を作り、最終的な計算処理のための内部関数を返す。内部関数は、外部関数の引数や変数にアクセスできる。
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(null, args);
} else {
return function (...args2) {
return curried.apply(null, args.concat(args2));
};
}
};
}
  1. bindメソッドを利用する: JavaScriptのbindメソッドは、提供されたオブジェクトにthis値がバインドされた新しい関数を生成し、さらに、いくつかの引数が事前に特定されます。
function curry(fn) {
return function curried(...args) {
if (args.length >= fn.length) {
return fn.apply(null, args);
} else {
return curried.bind(null, ...args);
}
};
}

この2つの方法を用いると、複数のパラメータを持つ関数を単一パラメータを受け取る関数の列に変換でき、それによって関数のカリー化を実現できます。

bannerAds