LoginSignup
5
0

More than 3 years have passed since last update.

Curryingについて調べてみよう!

Last updated at Posted at 2019-06-02

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を導入することで関数の引数ネーミングと処理が楽になります。

5
0
2

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
0