JavaScript における関数のカリング

JavaScriptJavaScriptBeginner
今すぐ練習

This tutorial is from open-source community. Access the source code

💡 このチュートリアルは英語版からAIによって翻訳されています。原文を確認するには、 ここをクリックしてください

はじめに

この実験では、JavaScript における関数のカリングとアンカリングの概念を探ります。関数のカリングは、複数の引数を取る関数を、それぞれが単一の引数を取る関数のシーケンスに変換する技術です。一方、関数のアンカリングは、それぞれが単一の引数を取る関数のシーケンスを、複数の引数を取る関数に変換するプロセスです。この実験を通じて、JavaScript においてこれらの技術の両方を実装する方法を学びます。


Skills Graph

%%%%{init: {'theme':'neutral'}}%%%% flowchart RL javascript(("JavaScript")) -.-> javascript/BasicConceptsGroup(["Basic Concepts"]) javascript(("JavaScript")) -.-> javascript/AdvancedConceptsGroup(["Advanced Concepts"]) javascript/BasicConceptsGroup -.-> javascript/variables("Variables") javascript/BasicConceptsGroup -.-> javascript/data_types("Data Types") javascript/BasicConceptsGroup -.-> javascript/arith_ops("Arithmetic Operators") javascript/BasicConceptsGroup -.-> javascript/comp_ops("Comparison Operators") javascript/BasicConceptsGroup -.-> javascript/cond_stmts("Conditional Statements") javascript/AdvancedConceptsGroup -.-> javascript/error_handle("Error Handling") javascript/AdvancedConceptsGroup -.-> javascript/higher_funcs("Higher-Order Functions") javascript/AdvancedConceptsGroup -.-> javascript/spread_rest("Spread and Rest Operators") subgraph Lab Skills javascript/variables -.-> lab-28676{{"JavaScript における関数のカリング"}} javascript/data_types -.-> lab-28676{{"JavaScript における関数のカリング"}} javascript/arith_ops -.-> lab-28676{{"JavaScript における関数のカリング"}} javascript/comp_ops -.-> lab-28676{{"JavaScript における関数のカリング"}} javascript/cond_stmts -.-> lab-28676{{"JavaScript における関数のカリング"}} javascript/error_handle -.-> lab-28676{{"JavaScript における関数のカリング"}} javascript/higher_funcs -.-> lab-28676{{"JavaScript における関数のカリング"}} javascript/spread_rest -.-> lab-28676{{"JavaScript における関数のカリング"}} end

関数をアンカリングする

指定された深さまで関数をアンカリングするには、uncurry 関数を使用します。

const uncurry =
  (fn, n = 1) =>
  (...args) => {
    const next = (acc) => (args) => args.reduce((x, y) => x(y), acc);
    if (n > args.length) throw new RangeError("Arguments too few!");
    return next(fn)(args.slice(0, n));
  };

uncurry 関数を使用するには、アンカリングしたい関数と、アンカリングする深さを引数として渡します。この関数は、渡したい引数で呼び出せる可変長関数を返します。

深さを指定しない場合、関数は深さ 1 までアンカリングします。

const add = (x) => (y) => (z) => x + y + z;
const uncurriedAdd = uncurry(add, 3);
uncurriedAdd(1, 2, 3); // 6

渡す引数の数が指定された深さより少ない場合、関数は RangeError をスローします。

まとめ

おめでとうございます!関数をアンカリングする実験を完了しました。技術を向上させるために、LabExでさらに多くの実験を行って練習してください。