JavaScriptの関数型プログラミング - カリー化

  • カリー化の原則
  • どのようにカリー化
  • カリー化アプリケーション

 カリー化の最初に、原則

カリー化:、数学およびコンピュータサイエンスの複数のパラメータを使用して変換をカリー化する機能に使用される技術のシリーズにパラメータの関数です。

カレーフロントエンド主な目的は、単一機能を強制する唯一つのパラメータを、コードの構造を簡素化するために、システムの保守性を向上させる、方法であるべきで、結合を低減、凝集機能を実行することが自然です。

利点をカリー:適応性を向上させるために、コードを重複コードを削減します。

カレー基本原理、機能を実行するための基準パラメータの2つの通路を複数に最初の分割を行います。

1  // の関数としての四つのパラメータがある
2  機能追加(A、B、C、D){
 3。     リターン Aは+ B + C + D;    
 4  }
 。5  // パラメータ渡しをカリー化両者を固定する方法を実現します
6  関数FixedParmasCurry(FU){
 7。     VAR _arg = Array.prototype.slice.call(引数,. 1); // 入ってくる初期パラメータを取得カリー化
。8      リターン 機能(){
 9          VAR newArg _arg.concat(= Array.prototype.call(引数、0)); // スプライシングパラメータは、現在実行
10          リターン fn.apply(この、newArgを);
 11      }
 12れます }
 13  // テスト
14  のvar FOO = FixedParmasCurry(ADD、1,2 );
 15はconsole.log(FOO(3,4)); // 10 
16  // テスト二つ
。17  VARのファン= FixedParmasCurry(,. 1を追加) 、
 18ではconsole.log(ファン(2,3,4)); // 10

しかし、それは本当のカリー化を達成していなかった、本当のカリー化関数を実行するために、任意の回数によって、任意のパラメータを毎回渡す必要があり、機能が必要な時間を達成するために、関数のパラメータへの引数まで実行した結果を返し、それは言うことができます各時間関数は、各実行ステージの結果を返す、適切なパラメータを渡されます。なぜあなたは言うのですか?詳細カリー分析アプリケーション。

 第二に、どのようにカリー化

1  // カリー化を達成
2  関数{(A、B、C、D)を加える
 。3      リターン A + B + C + ; D    
 4  }
 。5人の // :これは、以下でなければならない真のニーズカレー追加機能を
6  VAR = newAdd カレー(ADD);
 7 newAdd(1,2,3,4 。8 newAdd(2)(1)(3)(4 。9 newAdd(1,2)(3,4 );
 10 newAdd( 1,2)(3)(4 。11 newAdd(1,2,3)、(4 )、
 12である。newAdd(1)(2)(3,4- );
 13である。newAdd(1)、(2,3,4 ) ;
 14  //すなわち、真カレーは、上記の任意の組み合わせで実施することが可能で行われる
15  
16  関数カレー(FN、長さ){
 17      VARの長さ=長|| fn.length;
 18れる     リターン 関数(){
 19。         IF(arguments.lengthを< {長さ)
 20              VAR組み合わせる=のFn] .concat(Array.prototype.slice.call(引数、0 ));
 21れる             戻りカレー(FixedParmasCurry.apply(この合わせ)、長さ- arguments.lengthを);
 22である          } {
 23は             リターン fn.apply(この、引数);
 24          }
25      }
 26である }
 27  
28  機能FixedParmasCurry(FN){
 29      VAR _arg = Array.prototype.slice.call(引数,. 1); // 取得カリー化着信初期パラメータ
30      リターン 機能を(){
 31は         VAR newArg _arg.concat =(Array.prototype.slice.call(引数、0)); // スプライシングパラメータは、現在実行
32          リターン(fn.apply この、newArg);
 33である     }
 34れます }

分析を達成する:FixedParmasCurry(FN)は、直接実行を実行するために必要なパラメータの関数として実質的に入ってくるパラメータがあり、パラメータの長さの判定の欠如。初期化機能に必要な長さパラメータをカリー化の全体的な長さを達成するために、各計算は、関数に必要な長さに渡され、パラメータarguments.lengthを渡されたパラメータの長さがより大きいかまたは所望の長さに等しくなるまで、あなたが真実行することができます機能(行23)。

 第三に、アプリケーションのカレー

 以下のシミュレーションの例のAJAX要求要件:

1つの 機能のAjax(タイプ、URL、データ){
 2      VARの XHR = 新しい新しいXMLHTTPRequestを();
 3      xhr.open(タイプ、URL、trueに。4      xhr.send(データ);
 5  }
 6。 // の要求があった場合同時に、このアプローチを以下は明らかコードの冗長性が表示され、同じ3つの接続にパラメータを送信する
7。のAjax(「POST」、「www.test.com」、「KEYIN名=」);
 図8のAjax(「POST」、 'www.test2.com'、 'KEYIN名=' );
 図9のAjax( 'POST'、 'www.test3.com'、 'KEYIN名=' );
 10  // カレー
。11  VAR ajaxCurry = カレー(アヤックス)
 12  VARポスト= ajaxCurry( "POST" );
13ポスト( 'www.test.com'、 '名前= KEYIN' )。
14ポスト( 'www.test.com2'、 '名前= KEYIN' )。
15ポスト( 'www.test.com3'、 '名前= KEYIN')。

一例ではそれほど明白ではないかもしれない、それはコードのカップリングを低減することに加えて、そのような一般的な例のようなパラメータを導入した場合、サービス機能の複数の部分は、基礎となる実装と一致している場合、考えられる少なくとも一つのことであるが、柔軟性機能要件をマージ解体。

 

おすすめ

転載: www.cnblogs.com/ZheOneAndOnly/p/11367224.html