18

最近、JavaScriptで有限状態マシンの研究を始めました。それらを実装しやすくするライブラリも見つけました。オブジェクトの「状態」(たとえば、「準備完了」、「完了」、「非アクティブ」など)を追跡および変更するためにステートマシンが使用されるという考えは理解できたと思いますが、理解していません。私はそれらの実際的な意味を完全に理解していると思います。誰かが次のことを明確にすることで助けてもらえますか?

  • 有限ステートマシンとは正確には何ですか[または単にステートマシンと呼ばれていますか?両方の方向を指していると聞きました]?
  • 有限状態マシン(JavaScript)の実際の使用法は何ですか?
  • 有限状態マシンを使用したくないのはいつですか?
  • 有限状態マシン(JavaScript)をより詳細に説明している本、記事、チュートリアルなどはどれですか?
4

3 に答える 3

11

有限状態機械は抽象的な概念です。そのため、ステートマシンの概念は特定の言語と直交しています。ウィキペディアを見ると、「コンピュータープログラムと順序論理回路の両方を設計するために使用される計算の数学モデルです」と書かれています。

これは、FSMが通常、コンピューター科学者が「xyzを計算できるか」などの分野で質問に対処するために使用する数学的概念として使用されることを意味します。

あなたの質問とあなたのリンクに基づいて、私はあなたが異なる状態図(またはステートチャート)について尋ねることを意味していると思います。状態図を作成するときは、プログラムを一連の状態と、それらの状態で発生する可能性のあるイベントに分割します。たとえば、プログラムが「EditingForm」状態にあり、イベント「doSave」を受信して​​から「Saving」状態になり、イベント「Save Complete」を受信して​​、「Viewing」状態に戻る場合があります。

この抽象化は、プログラマーがいつ何が起こるべきかを概念的に整理できるため、非常に便利です。これを正しく実装すると、コードがよりクリーンで整理されたものになります。これにより、バグが少なくなります。状態図は、実装によっては、状態に対して定義されたイベントのみを処理することで、意図しない影響を防ぐことができます。たとえば、「表示」には「保存」イベントが定義されていない可能性があります。したがって、プログラムが「 「表示」状態は「編集中」状態でのみ発生するため、保存は無意味です。

リンク先のフレームワークの概要を見ると、状態の開始、状態の終了、アクションの発生などにフックするために使用できるハンドラーがたくさんあることがわかります。これにより、実際に対応することを実行できます。状態/アクション。たとえば、「編集中」状態に入ると、フォームをユーザーに提示して保存ボタンを有効にすることができます。「保存中」状態に入ると、ボタンを無効にして保存要求を発行する場合があります。「SaveComplete」イベントを受信すると、「Viewing」状態に移行し、フォームを削除して、他の何かを表示することができます。

于 2013-02-11T14:54:59.327 に答える
11

有限状態マシンとは何ですか?

これは、イベントとそれらの間の移行の副作用を宣言する方法です。

有限状態マシンのいくつかの実用的な使用法は何ですか?

このようなコードの代わりに:

function decide()
{
  if(mouseButtonIsDown && mouseIsMoving && mouseCoordinatesAreWithin(0, 0, 100, 100) && thePixelIsRed) {
    clearBuffers();
    startPlaying();
    cursorBecomeHand();
  }
  else if(!mouseButtonIsDown && !mouseIsMoving && mouseCoordinatesAreWithin(0, 0, 100, 100) && thePixelIsRed) {


  }
  // more ifs
}

いくつかの状態のみを保持し、イベントを関数に分割して、どの状態で何が起こるかを定義します。

function drag_started() {
 switch(your_state) {
   case "within_box":
    clearBuffers();
    cursorBecomeHand();
    your_state= "playing";
    startPlaying();
    break;
 }

}

これにより、状態とイベントが分離されます。つまり、リグレッションが少なくなり、保守性が向上します。

有限状態マシンを使用したくないのはいつですか?

この時点で自分自身に答えます。ステートが1つしかない場合は、ステートマシンを気にしないでください。

有限状態マシン(JavaScript)をより詳細に説明している本、記事、チュートリアルなどはどれですか?

学界に対しては、jqueryプラグインのソースを読むことをお勧めします。たとえば、jqueryuiソースの_mouseMoveと_mouseUpの下を見てください

于 2013-02-11T15:05:18.243 に答える
3

これは、言語パーサーのスキャナーおよびレクサーでよく使用されます。特定の構文規則に基づいて、ソースコード内の各トークンを作成して分析します。

基本的に、ここでは現在の状態をチェックして、次の文字またはトークンが意味をなすかどうか、およびそれらをどのように編成する必要があるかを確認します。

于 2013-02-11T14:57:12.803 に答える