Skip to content

State Machine History_j

HarukaK edited this page Mar 18, 2015 · 3 revisions

== ステートマシンの履歴 ==

ステートマシンの遷移の History プロパティは、遷移が遷移先もしくは「to」のステートになる場合に、遷移先ステートの子マシンでどのステートがアクティブであるかを決定します。この遷移先ステートが子マシンを含まない場合、History は無効です。遷移先ステートが以前に一度もアクティブになったことがない場合も、過去の履歴がないため History は無意味です。遷移先ステートの各マシンが、それぞれの開始ステートを入力します。

履歴はステートが以前にアクティブであり、子マシンを含む場合にのみ有用です。これは、それぞれの子マシンにアクティブなステートがあるためです。履歴は次のような場合に役立ちます。ステートマシンが、あるステートに遷移して戻る場合に、そのステートが最後にアクティブであった時の子マシンの直近のアクティブなステートを復元させるか方法を決めることができます。

履歴には以下の 3 通りの値が使用可能です:

  • None: 過去の履歴を無視します。ステートの遷移先に含まれるそれぞれのアクティブなマシンおよび、それ以下のあらゆるレベルのアクティブな各マシンの開始ステートが、アクティブなステートになります。
  • Shallow: ステートの遷移先に含まれるそれぞれのアクティブなマシンの、最後のアクティブなステートが、アクティブなステートになります。これらのマシンが、アクティブな子マシンのあるステートを持つ場合、その開始ステートが各マシンのアクティブなステートになります。つまり、1 つだけ下位のレベルの以前の履歴を使用します。
  • Deep: ステートの遷移先に含まれるすべてのアクティブなマシンおよび、それ以下の全レベルの、最後のアクティブなステートが、アクティブなステートになります。
下図のステートマシンの例を参照してください。このマシンには 3 つのレベルがあります。レベル 1 の「True」ステートには、2 つの並行するステートマシン「A」と「B」が含まれます。レベル 2 では、2 番目のステートマシンの「1」のステートに、レベル 3 にあるステートマシン「C」が含まれます。

太線の四角に太字のステート名で示されるステートは、最後に「True」ステートがアクティブであった時の子マシンのアクティブなステートです。たとえば、レベル 1 で最後に「True」から「False」に遷移した前などの場合です。次に、レベル 1 で「False」から「True」への遷移が発生した場合を考察します。この場合は「False」から「True」への遷移の History の設定により、異なる振る舞いになります。

  • None の場合。過去の履歴は無視されるため、すべてのアクティブな子マシンがそれぞれの開始ステートで実行を始めます。レベル 2 およびレベル 3 では、すべての子マシンの現在のステートが「1」になります。
  • Shallow の場合。履歴は、レベル 1 の「True」ステートの直下の、レベル 2 にのみ使用されます。レベル 2 では、ステートマシン A の現在のステートが「2」に、B の現在のステートが「1」になります。これが、レベル 2 の子マシンである A と B の最後のアクティブなステートが「2」と「1」であったためです。レベル 3 では、ステートマシン C のアクティブなステートが「1」になります。このレベルには過去の履歴が適用されず、開始ステートの「1」が使用されます。
  • Deep の場合。履歴は、レベル 1 の「True」ステート以下の、すべてのレベルに使用されます。レベル 2 では、ステートマシン A の現在のステートが「2」に、B の現在のステートが「1」になります。これが、レベル 2 のマシンである A と B の最後のアクティブなステートが「2」と「1」であったためです。レベル 3 では、ステートマシン C のアクティブなステートは、最後のアクティブなステートの「2」になります。
なお、History はステート自体ではなく、ステートへの遷移のプロパティです。これにより、遷移のされ方によってステートに異なる History オプションを使用できるため、より優れた柔軟性が提供されます。
Clone this wiki locally