- カリー化の原則
- どのようにカリー化
- カリー化アプリケーション
カリー化の最初に、原則
カリー化:、数学およびコンピュータサイエンスの複数のパラメータを使用して変換をカリー化する機能に使用される技術のシリーズにパラメータの関数です。
カレーフロントエンド主な目的は、単一機能を強制する唯一つのパラメータを、コードの構造を簡素化するために、システムの保守性を向上させる、方法であるべきで、結合を低減、凝集機能を実行することが自然です。
利点をカリー:適応性を向上させるために、コードを重複コードを削減します。
カレー基本原理、機能を実行するための基準パラメータの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')。
一例ではそれほど明白ではないかもしれない、それはコードのカップリングを低減することに加えて、そのような一般的な例のようなパラメータを導入した場合、サービス機能の複数の部分は、基礎となる実装と一致している場合、考えられる少なくとも一つのことであるが、柔軟性機能要件をマージ解体。