初期化して決定するJavaScript関数を使用して

初期化して決定する関数の使用方法 問題を初期化し、意思決定機能を使用するようにします。理論出荷するときのコードでロジックを変更する場所のコンテキストに基づいてする必要がある曲を書く場合は、意思決定構造を使用します。たとえば、光スイッチは、プログラムを使って実装しているという。場合は、光の場合は、ライトが消灯してオンにし、場合は、ランプが点灯して光をオフにします。プログラムの動作条件によって決定されます。は、よく見るに値する1つの例の動作初期化されます。初期化は、通常の場合のみそれは既に持っているが起こる必要があります。これは、初期化ロジックをアプリケーションが正しく機能するために、デフォルトのフレームワークを作成し初期化が重要です。ソリューション例示目的のために、下記の例では関数は、関数内に埋め込まれている初期化が必要行きましょう。ロジックが既に発生していない初期化を実行することです。のように定義され呼ばれる関数は次のとおり、それは初期化するための呼び出しが埋め込まれます。

  

ヒント あなたは、明示的な初期化を実行しないコードlazy初期化時に規則を書くベースを実装するコードは、このタイプを使用することができます。

 ソース: /サイト/ルート/ ajaxrecipes / javascriptに/ makingdecisionsinitialization.html関数ClassicalManipulateObject(OBJの)(情報("ClassicalManipulateObject"、""最低料金); 場合(!didInitialize)( DoInitialization(OBJの);  他( インフォメーション("ClassicalManipulateObject"、"いいえ初期化"必要); assertEquals(3、obj.value);("ClassicalManipulateObject"、"終了")インフォメーション;)

 

この例では、太字のコードは、初期化機能に関連します。 didInitializeは、trueまたはfalseにすることができますフラグ変数です。場合は、変数didInitializeし、初期化をしていない場所がfalse;場合は、変数didInitialize trueの場合、初期化が行わでした。場合は、初期化DoInitialization関数が呼び出される場所を取らなかった。通知は、ロジック内の変数をするかどうかの初期化や関数の初期化を行うが行われて表しています。これは、変数のどこかで定義されていないこのコードは、変数に問題が正しくどこかに割り当てられる必要があります。そして、どこかのクロスは、変数の状態とは、初期化機能の呼び出しの間の参照です。1つのソリューションがはるかにDoInitialization関数のコンテキストでは、初期化ロジックを埋め込みます。しかし実際にはどこかの変数であり、どこかの初期化関数であり、どこかのクロス変数の初期化関数の間の参照です。そこでここでは、ロジックを、"大きな画像"という意味では無関係です。

もう1つの解決策は、初期化機能の意思決定機関としては考えるのですが、国家としての。そこに初期化を実行するには、初期状態、および他の状態は、初期化を実行することです。ある意味では、変数didInitializeの状態を表現したものです。心の中で考えて維持すると、JavaScriptのオブジェクトとしての機能を扱います知っている。したがって、変数は関数ではなく、ブール型の変数かもしれないdidInitialize。変数を参照する関数としての状態を扱うには、初期化を必要とする機能を簡素化することが可能になります。 ClassicalManipulateObject関数の実装ManipulateObjectには、次のコードに示すように変更されます。

 ソース: /サイト/ルート/ ajaxrecipes / javascriptに/ makingdecisionsinitialization.html関数ManipulateObject(OBJの)(情報("ManipulateObject"、""最低料金); InitializeObject(OBJの);assertEquals(3、obj.value);("ManipulateObject"、"終了")インフォメーション;)

変更の実装では、太字のコードを再度初期化機能を表します。ここにはない決定が単なる関数呼び出しInitializeObjectすることです。あなたは、"私の決定は、決定InitializeObjectで実装されてベースの初期化と同じことを行っている可能性が考えているかもしれない"しかし、これは正しくない場合は、InitializeObjectの実装のためには、何も決定されます。 InitializeObjectの実装および変数を初期化して続行するために処理できます。場合があるかどうかは、初期化が発生した上で何も決定され、InitializeObject状態の場合、この初期化機能を呼び出すことはできませんが初期化されるすべてのコールの状態を初期化するための機能を表しています。魔法のJavaScriptの関数として扱う実際にはオブジェクトです。 InitializeObjectの実装は以下のとおり:

関数InitializeObject(OBJの)(obj.value = 3;("InitializeObject"、"初期化を行う")情報; InitializeObject = InitializeEmptyObject;

InitializeObject、objパラメータの実装では、3の値に初期化されている太字のコードInitializeObject関数の割り当てを示しています。身体なしには、InitializeObjectと呼ばれるのは初めて、初期化が行われていることを意味割り当てInitializeObjectを参照する機能が、すべての呼び出し、その後は何もない空の関数を呼び出すことです。

これは、初期化機能の完全な実装では、単一の意思決定や変数を使用せずにいる。このアプローチの利点の1つは、どの変数のクロスリファレンス機能を理解する必要はありません。この関数は、自分自身の面倒を呼び出しInitializeObject電話をかけることは、すべての注意が払われることを知りながら、このアプローチのもう一つの利点は、あなたの状態エンジンが次の状態の現在の状態の実行によって決定されますを作成することです。統合することはありません一元的に実行の全体的な流れを決定する決定をブロックに位置され、新しい状態を必要とするたびに更新する必要があります。行う場合、通常はJava、Cなどの言語で#、またはC + +、あなたの周り再割り当てを行っていないコードを記述する定義された関数の実装です。そして、これは、この動作は、開発者の心の中でengrainedされ、彼らも行う考えていないこと。ための関数オブジェクトですしかし、全く問題はないJavaScriptの機能の再割り当てです。として、それらの際には、他の言語での作業と思う機能ユニークな機能を持つユニークな識別子ではありません。

InitializeObjectの実装では動作し、完全なソリューションです。しかし、そこでは少し不便一InitializeObject空の関数に割り当てられており、初期化機能は、HTMLページまで失われてリフレッシュされます。いくつかの問題については、受け入れ可能な解決です。これだけを特定のブラウザ固有の方法でXMLHttpRequestのインスタンスを作成することができますたとえば、1回だけXMLHttpRequestをラップします。いくつかのインスタンスは、ときにリセットし、再度初期化し、その場合は、関数に関数内では、次の例で示されるInitializeObjectをラップする必要がありますかできるようにしたいことがあります。

 ソース: /サイト/ルート/ ajaxrecipes / javascriptに/ makingdecisionsinitialization.html関数ResetInitializeObject()(InitializeObject =関数(OBJの)(obj.value = 3;情報("InitializeObject"、"")の初期化を行う; InitializeObject = InitializeEmptyObject;))ResetInitializeObject( );

InitializeObject関数は、変数には、ResetInitializeObjectコンテキスト内で関数の実装が割り当てられます。レシピ2-4に示すことがどの関数が宣言されると、たとえそれか場違いの奇数のように違いはありません。 InitializeObjectを初期化するには、ResetInitializeObject関数は、そのInitializeObject関数を作成すると呼ばれます。そして、ときに空の関数に自分自身を再割り当てと呼ばれるInitializeObject。

ResetInitializeObjectを再度初期化リセットされ、InitializeObject状態を初期化して、もう一度自分自身をリセットすることができますを呼び出すと、この例から、その決定をif文を使って実装する必要がないことがわかります。がどのような状態エンジンを実装することも示していますもう1つの例を示します。この例では光スイッチの場合は、ライトが点灯されますが、それがオフになって実装し、その逆。注意していない単一のif文は、この例で使用されます。

 ソース: /サイト/ルート/ ajaxrecipes / javascriptに/ makingdecisionsinitialization.html関数ToggleLight()(ToggleLight.on =関数()(ToggleLight.curr = ToggleLight.off;を返す"を";)ToggleLight.off =関数()(ToggleLight.curr = ToggleLight.on;リターンを"off";)(();)(電子)(情報("ToggleLight"、"初期化...");戻りToggleLight.onキャッチToggleLight.curr復帰してください();))

関数ToggleLightするたびにライトをオンまたはオフに切り替えてほしいと呼ばれます。があるかを示すためのパラメータはオフ、その機能はToogleLight関数内に埋め込まれている。 ToggleLightの実装ではオンとオフの2つのプロパティは、どちらの関数があります。機能はオフcurrプロパティに代入して返します"バッファ"を。オフ機能をオフにcurrプロパティを割り当てると"オフ"のバッファを返します。

状態をトグルするには、関数と呼ばれるが定義されているcurrプロパティです。これcurrと呼ばれるのは初めてToggleLight初期化されませんcurrの呼び出し元の例外が、ブロック内に埋め込まれている。したがって、例外が生成され、プロパティに(これは、関数)が呼び出され、例外ブロックのキャッチ一部です。自動的にcurr割り当てて、その状態を初期化を呼び出す。これは、例外ブロックを使用して上許容さを呼び出すので、lazy初期化を実装する方法です。際、意思決定のブロックと関数を記述する状態を考えると、このレシピは、次の側面を覚えておくことが重要です:

あなたのプログラムは多くの決定などのため意思決定が異なる状態に置き換えられているを含める必要はありません•。

場合は、状態エンジンの問題にこの問題を打破することができます•この機能を再割り当てすることができます。

ための動作を動的に置換することができます•現在の割り当て機能を備えた柔軟に対応することができます。たとえば、もしあなたが意思決定を使用して、そのことを意味する2段階の初期化を必要とする追加のif文のソースコードの中央の場所に変更された。割り当て関数を使用する場合は、状態のエンジンでの動作を実行中に、ローカルレベルで変更することができます作成されます。

•ときにこのレシピの例を使って、あなたは、"なぜ、クラスとオブジェクトを使用していない?考えて読み、"その答えは、関数オブジェクトの例オブジェクト指向のプログラミングしていることです。私たちは、通常の関数と仮定コードが奇妙に見える機能は、そのクラスは一般に機能されていないクラスを作成するために使用されます。もし私の助言できるようにされている表記法を気にすると、ビットのためにあなたの心にはJavaScriptのシチューのこの機能。あなたが確かにそれはプログラミングの強力な手段です見に来てされます。

注意してください の代わりに再帰を使って意思決定のブロックを使用する別の例をしてください。

記事は、ソニアLandeを提出


免責事項:弊社のウェブサイトは、この資料の内容については責任を負いません。 Webarticles無料の情報リソースです。
重要: この記事は、"初期化するとの決定をするJavaScriptを"自動ソフトウェアによって翻訳された関数を使用する。大変申し訳ございませんが発生した可能性があります任意のスペルミスを感じている。お客様のご理解いただき、ありがとうございます。


Online: 252 users browsing the articles directory