0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

個人的アウトプットカレンダーAdvent Calendar 2024

Day 11

【JavaScript】カリー化って何?

Last updated at Posted at 2024-12-10

以前JavaScriptの学習をしていた際、
カリー化というワードが出てきました。

初めは見間違いかと思い、日頃からスパイスカレーを食べすぎて
ついに目もカレーに侵食されたかと2度見をしてもカリー化と記載されていました。

初めて目にしたワード。
しかもカレー。

これは詳しく知りたいと思い、
今回まとめていきます。

カリー化とは

カリー化とは一体何でしょうか。

こちらのサイトに下記のように記載されていました。

カリー化は、関数を扱う際の上級テクニックです。これはJavaScriptだけでなく、他の言語でも使用されます。
カリー化はf(a, b, c)として呼び出せる関数をf(a)(b)(c)のように呼び出せるようにする、関数の変形のことを指します。
カリー化は関数を呼び出しません。ただ変形するだけです。

なるほど。
どのようなものかは理解できました。

では実際の例とメリット等をみていきましょう。

通常の関数は複数の引数を一度に受け取りますが、
カリー化された関数は引数を1つずつ受け取り、
そのたびに新しい関数を返します。

// 通常の関数
function add(a, b) {
  return a + b;
}

console.log(add(2, 3)) // 5


// カリー化
function curriedAdd(a) {
  return function(b) {
    return a + b;
  };
}

const add2 = curriedAdd(2)
console.log(add2(3)) // 5
console.log(curriedAdd(2)(3)) // 5

下記の例では、
カリー化を使用することでフィルタリングの条件を柔軟に設定できます。

function isInRange(min) {
  return function(max) {
    return function(value) {
      return value >= min && value <= max;
    };
  };
}

const isTeenager = isInRange(13)(19); // 13-19の範囲をチェック
console.log(isTeenager(15)); // true
console.log(isTeenager(25)); // false

カリー化のメリット

カリー化には下記のようなメリットがあると思います。

①再利用性の向上

引数の一部を固定した関数を作成し、別の場所で使いまわすことができます。

function multiply(a) {
  return function(b) {
    return a * b;
  };
}

const double = multiply(2); // 2倍にする関数
const triple = multiply(3); // 3倍にする関数

console.log([1, 2, 3].map(double)); // [2, 4, 6]
console.log([1, 2, 3].map(triple)); // [3, 6, 9]

②可読性と意図の明確化

大きな関数を部分的に分解し、処理を順序立てて書くことができます。
下記の例では、ドル記号を付与した値をフォーマットするという意図がより明確になります。

// 通常の関数
function formatCurrency(amount, symbol) {
  return `${symbol}${amount}`;
}
console.log(formatCurrency(100, "$")); // $100

// カリー化された関数
function curriedFormatCurrency(symbol) {
  return function(amount) {
    return `${symbol}${amount}`;
  };
}
const formatUSD = curriedFormatCurrency("$");
console.log(formatUSD(100)); // $100

③関数型プログラミングに適合

関数型プログラミングでは、状態の変更を避け、
関数間での副作用を減らすことが推奨されています。
カリー化を使うと、状態を持たない関数を作りやすくなります。

終わりに

今回はカリー化の技術について学びました。

実務でも使用できそうな技術のため、
機会があれば積極的に使用したいと思います。

ちなみにカリー化の由来は、
論理学者のハスケル・カリーだそうです。

食べ物じゃなかったんですね、、、

それでは。

参考文献

0
0
0

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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?