有限状態マシンとは何ですか?
これは、イベントとそれらの間の移行の副作用を宣言する方法です。
有限状態マシンのいくつかの実用的な使用法は何ですか?
このようなコードの代わりに:
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の下を見てください