JavaScriptのカリー化(Currying)とは?基本の仕組みと実装例をわかりやすく解説
カリー化(Currying)とは
カリー化とは、複数の引数を取る関数を、「1つの引数を取る関数」の連鎖へと変換するテクニックです。言い換えると、関数がすべての引数を一度に受け取るのではなく、まず最初の引数だけを受け取って新しい関数を返し、その関数が次の引数を受け取ってさらに新しい関数を返す…という処理を、すべての引数が揃うまで繰り返していく方式です。
この名前は、論理学者ハスケル・カリー(Haskell Curry)に由来しており、関数型プログラミングにおける重要な概念の一つとして広く知られています。
カリー化の主なメリット・用途
① 同じ変数を何度も渡す手間を省き、コードの再利用性を高められる。
② 引数の一部だけを先に固定した「部分適用」が可能になり、柔軟な設計ができる。
③ 特にイベントハンドリングなど、後から値が確定する場面で非常に有用。
基本の構文
function Myfunction(a) {
return (b) => {
return (c) => {
return a * b * c;
};
};
}このように、アロー関数をネストさせて書くことで、簡潔にカリー化された関数を定義できます。
例1:カリー化を使わない通常の関数
以下の例では、カリー化を使用せず、すべての引数を一度に渡しています。直方体の体積を求める関数に対し、volume(11, 2, 3) の形でまとめて引数を渡して計算します。
<html>
<body>
<script>
function volume(length, width, height) {
return length * width * height;
}
document.write((volume(11, 2, 3)));
</script>
</body>
</html>出力結果
66
例2:カリー化を使った関数
続いてカリー化を使用した例です。引数を一つずつ volume(11)(2)(3) の形式で渡していき、最後の引数が渡された時点で初めて計算が実行されます。途中段階ではまだ関数が返されるだけであり、これがカリー化の大きな特徴です。
<html>
<body>
<script>
function volume(length) {
return function(width) {
return function(height) {
return height * width * length;
};
};
}
document.write(volume(11)(2)(3));
</script>
</body>
</html>出力結果
66
まとめ
どちらの例も結果は同じ66ですが、カリー化を使うことで「長さだけ先に決めておき、幅と高さは後から指定する」といった柔軟な使い方が可能になります。特に設定値の一部を固定して再利用したい場合や、イベント処理のようにタイミングが分かれるケースで、カリー化はコードをよりシンプルかつ保守しやすくしてくれる強力な手法です。
-
JavaScriptのクロージャとは?仕組みと実装例をわかりやすく解説
クロージャとはJavaScriptにおけるクロージャ(Closure)とは、外側の関数の実行が完了して値を返した後であっても、内側の関数から外側の関数のスコープ(変数)にアクセスできる仕組みのことです。言い換えれば、内側の関数は、外側の関数の変数に対して常にアクセスできるということです。この性質を活用することで、データを外部から直接操作されないように隠蔽したり、関数の呼び出し間で状態を保持する処理を実現したりすることが可能になります。クロージャのサンプルコード以下は、JavaScriptでクロージャを使用した具体的なコード例です。ボタンをクリックすると、クロージャによって保持された値を使って2
-
JavaScriptにおけるカリー化と部分適用の違いを実例でわかりやすく解説
はじめに 関数型プログラミングでよく登場するカリー化(Currying)と部分適用(Partial Application)は、どちらも関数の引数の扱いを工夫するテクニックですが、その仕組みと目的は異なります。本記事では、それぞれの概念の違いと、JavaScriptでの具体的な実装方法をわかりやすく解説します。 カリー化(Currying)とは カリー化とは、複数の引数を取る関数を、「1つの引数だけを受け取る関数」の連鎖へと変換するテクニックです。関数は引数を1つ受け取ると、次の引数を受け取るための新しい関数を返します。このようにして返された関数は、f(a)(b)(c) のようにチェーン(連