Currying??
curryを見て、カレーを連想するのは、良くないです。
「Haskell Brooks Curry」という人の名前です。
curryは、複数の引数を持つ関数を呼び出す場合に、パラメータの数より少ない数のパラメータを引数として受け取ると、足りないパラメータを引数として受け取る。
つまり、関数一つが、n個の引数を受ける過程をn個の関数として、それぞれの因子を受けるようにするもです。
Curryingを使ってみよう!!
var greet = function(greeting, name) {
console.log(greeting + ", " + name);
};
greet("Hello", "uni");
一旦、挨拶をする関数を作りました。
結果は、Hello, uniが出ます。
var curryGreet = function(greeting) {
return function(name) {
console.log(greeting + ", " + name);
};
};
var greet = curryGreet ("Hello");
greet("uni");
greet("DIO");
結果は、Hello, uniとHello, DIOが出ます。
今回は、4つの因子を使います。
var curryGreet = function(greeting) {
return function(separator) {
return function(emphasis) {
return function(name) {
console.log(greeting + separator + name + emphasis);
};
};
};
};
これに対して、新しい関数を作りました。
var sampleGreet1 = curryGreet("Hello")("...")("?");
sampleGreet1("uni");
sampleGreet1("DIO");
結果は、Hello...uni?とHello...DIO? が出ます。
もちろん、色んなバリエーションを作ることができます。
var sampleGreet2 = curryGreet("Hello")(", ");
sampleGreet2(".")("uni");
sampleGreet2(".")("DIO");
結果は、Hello, uniとHello, DIOが出ます。
var sampleGreet3 = sampleGreet2("?");
sampleGreet3("uni");
sampleGreet3("uni");
結果は、Hello, uni?とHello, DIO?が出ます。
少しは、理解できましたか?
CurryingはJavaScriptで結構便利な技術です。
curryingを導入することで関数の引数ネーミングと処理が楽になります。