bff

フルスタックエンジニアを目指して学んだことなどを記録しています

カリー化とは

カリー化についての理解が浅かったため、調べてまとめました。

カリー化とは

複数の引数をとる関数を、引数が「もとの関数の最初の引数」で戻り値が「もとの関数の残りの引数を取り結果を返す関数」であるような関数にすること

要は以下のようなoriginalからcurriedへの変更を指します。

const original = (a, b) => {
return a + b;
};
 
const curried = (a) => {
consut num [];
return (b) => a + b;
};
 
original(1, 2); // 3
curried(1)(2); //3

メリット?

カリー化によって、部分適用(片方の引数を固定し、もう片方の引数のみをとる関数を作成すること)が簡単にできるようになります。

// 例えば、毎回片方の引数は1の場合、元の処理だと都度以下のように記載します。
original(1, 1); // 2
original(1, 2); // 3
original(1, 100); // 101
 
// 一方で、カリー化を使えば片方の引数を固定した関数が簡単に作れます。
const partial = curried(1);
partial(1); // 2
partial(2); // 3
partial(100); // 101

といっても、あまり趣味の範囲な気がしますし、読みづらいと感じる人も多いのではないでしょうか。
Haskellのような関数型言語であれば、言語自体がカリー化をサポートしておりメリットが享受できるらしいですが、JavaScriptではカリー化を使う意味は薄いと感じました。

何かいいユースケースがあればコメントに記載ください。

%u30AB%u30EA%u30FC%u5316%u95A2%u6570%u306B%u3064%u3044%u3066%u306E%u7406%u89E3%u304C%u6D45%u304B%u3063%u305F%u305F%u3081%u3001%u8ABF%u3079%u3066%u307E%u3068%u3081%u307E%u3057%u305F%u3002%0A%0A%23%23%23%20%u30AB%u30EA%u30FC%u5316%u3068%u306F%0A%3E%u8907%u6570%u306E%u5F15%u6570%u3092%u3068%u308B%u95A2%u6570%u3092%u3001%u5F15%u6570%u304C%u300C%u3082%u3068%u306E%u95A2%u6570%u306E%u6700%u521D%u306E%u5F15%u6570%u300D%u3067%u623B%u308A%u5024%u304C%u300C%u3082%u3068%u306E%u95A2%u6570%u306E%u6B8B%u308A%u306E%u5F15%u6570%u3092%u53D6%u308A%u7D50%u679C%u3092%u8FD4%u3059%u95A2%u6570%u300D%u3067%u3042%u308B%u3088%u3046%u306A%u95A2%u6570%u306B%u3059%u308B%u3053%u3068%0A%0A%u8981%u306F%u4EE5%u4E0B%u306E%u3088%u3046%u306Aoriginal%u304B%u3089curried%u3078%u306E%u5909%u66F4%u3092%u6307%u3057%u307E%u3059%u3002%0A%60%60%60%0Aconst%20original%20%3D%20%28a%2C%20b%29%20%3D%3E%20%7B%0A%09return%20a%20+%20b%3B%0A%7D%3B%0A%0Aconst%20curried%20%3D%20%28a%29%20%3D%3E%20%7B%0A%20%20%20%20consut%20num%20%5B%5D%3B%0A%09return%20%28b%29%20%3D%3E%20a%20+%20b%3B%0A%7D%3B%0A%0Aoriginal%281%2C%202%29%3B%20//%203%0Acurried%281%29%282%29%3B%20//3%20%0A%60%60%60%0A%0A%23%23%23%20%u30E1%u30EA%u30C3%u30C8%3F%0A%u30AB%u30EA%u30FC%u5316%u306B%u3088%u3063%u3066%u3001%u90E8%u5206%u9069%u7528%28%u7247%u65B9%u306E%u5F15%u6570%u3092%u56FA%u5B9A%u3057%u3001%u3082%u3046%u7247%u65B9%u306E%u5F15%u6570%u306E%u307F%u3092%u3068%u308B%u95A2%u6570%u3092%u4F5C%u6210%u3059%u308B%u3053%u3068%29%u304C%u7C21%u5358%u306B%u3067%u304D%u308B%u3088%u3046%u306B%u306A%u308A%u307E%u3059%u3002%0A%60%60%60%0A//%20%u4F8B%u3048%u3070%u3001%u6BCE%u56DE%u7247%u65B9%u306E%u5F15%u6570%u306F1%u306E%u5834%u5408%u3001%u5143%u306E%u51E6%u7406%u3060%u3068%u90FD%u5EA6%u4EE5%u4E0B%u306E%u3088%u3046%u306B%u8A18%u8F09%u3057%u307E%u3059%u3002%0Aoriginal%281%2C%201%29%3B%20//%202%0Aoriginal%281%2C%202%29%3B%20//%203%0Aoriginal%281%2C%20100%29%3B%20//%20101%0A%0A//%20%u4E00%u65B9%u3067%u3001%u30AB%u30EA%u30FC%u5316%u3092%u4F7F%u3048%u3070%u7247%u65B9%u306E%u5F15%u6570%u3092%u56FA%u5B9A%u3057%u305F%u95A2%u6570%u304C%u7C21%u5358%u306B%u4F5C%u308C%u307E%u3059%u3002%0Aconst%20partial%20%3D%20curried%281%29%3B%0Apartial%281%29%3B%20//%202%0Apartial%282%29%3B%20//%203%0Apartial%28100%29%3B%20//%20101%0A%60%60%60%0A%0A%u3068%u3044%u3063%u3066%u3082%u3001%u3042%u307E%u308A%u8DA3%u5473%u306E%u7BC4%u56F2%u306A%u6C17%u304C%u3057%u307E%u3059%u3057%u3001%u8AAD%u307F%u3065%u3089%u3044%u3068%u611F%u3058%u308B%u4EBA%u3082%u591A%u3044%u306E%u3067%u306F%u306A%u3044%u3067%u3057%u3087%u3046%u304B%u3002%0AHaskell%u306E%u3088%u3046%u306A%u95A2%u6570%u578B%u8A00%u8A9E%u3067%u3042%u308C%u3070%u3001%u8A00%u8A9E%u81EA%u4F53%u304C%u30AB%u30EA%u30FC%u5316%u3092%u30B5%u30DD%u30FC%u30C8%u3057%u3066%u304A%u308A%u30E1%u30EA%u30C3%u30C8%u304C%u4EAB%u53D7%u3067%u304D%u308B%u3089%u3057%u3044%u3067%u3059%u304C%u3001JavaScript%u3067%u306F%u30AB%u30EA%u30FC%u5316%u3092%u4F7F%u3046%u610F%u5473%u306F%u8584%u3044%u3068%u611F%u3058%u307E%u3057%u305F%u3002%0A%0A%u4F55%u304B%u3044%u3044%u30E6%u30FC%u30B9%u30B1%u30FC%u30B9%u304C%u3042%u308C%u3070%u30B3%u30E1%u30F3%u30C8%u306B%u8A18%u8F09%u304F%u3060%u3055%u3044%u3002