JavaScript 関数のカリー化 (currying) サンプルコード

関数のカリー化 (currying) を JavaScript (ES5/ES6) で書いたサンプルコードをご紹介します。

JavaScript

関数のカリー化 JavaScript サンプルコード

function resultFn に value method を定義して、関数自体を return resultFn; で返してるのがポイントです。

関数もオブジェクトなので function resultFnvar resultFn でもオブジェクトなので、それに resultFn.result = function () {} と result method を定義できます。

参考:関数もオブジェクトである – JavaScriptの関数とメソッド:CodeZine(コードジン)

関数のカリー化 (currying) ES5

function resultFn 関数の例

function add(x) {
    var sum = x;

    function resultFn(y) {
        sum += y;
        return resultFn;
    }

    resultFn.result = function () {
        return sum;
    };
    return resultFn;
}

var resultFn = function (y) {} メソッドの例

function add(x) {
    var sum = x;

    var resultFn = function (y) {
        sum += y;
        return resultFn;
    };
    resultFn.result = function () {
        return sum;
    };

    return resultFn;
}

関数のカリー化 (currying) ES6 (ES2015)

function resultFn 関数の例

function add(x) {
    let sum = x;

    function resultFn(y) {
        sum += y;
        return resultFn;
    }

    resultFn.result = function () {
        return sum;
    };
    return resultFn;
}

const resultFn = (y) => {} メソッドの例

function add(x) {
    let sum = x;

    const resultFn = (y) => {
        sum += y;
        return resultFn;
    };
    resultFn.result = function () {
        return sum;
    };

    return resultFn;
}

関数のカリー化 add method 実行結果

> add(2)(3)(4).result
[Function]
> add(2)(3)(4).result()
9

以上、JavaScript で関数のカリー化 (currying) のサンプルコードを書いてみた、現場からお送りしました。

参考情報