ステート アクションの組み合わせによる冗長コードの削除
ステート内で同じタスクを実行する entry
, during
、および exit
アクションを組み合わせることができます。
同じタスクを実行するステート アクションを組み合わせることで、冗長コードを削除します。以下に例を示します。
個別のアクション | 同等の組み合わせアクション |
---|---|
entry: y = 0; y=y+1; during: y=y+1; |
entry: y = 0; entry, during: y=y+1; |
en: fcn1(); fcn2(); du: fcn1(); ex: fcn1(); |
en, du, ex: fcn1(); en: fcn2(); |
ステート アクションをこのように組み合わせることで同じチャートの実行動作 (セマンティクス) を実現し、対応する個別アクションと同じコードを生成します。
ステート アクションを組み合わせる方法
同じタスクを実行する entry
、during
、および/または exit
アクションを、ステート内でコンマ区切りのリストとして組み合わせます。構文は、以下のとおりです。
entry, during, exit: task1; task2;...taskN;
また、 等価な省略形を使うこともできます。
en, du, ex: task1; task2;...taskN;
有効な組み合わせ
3 つのアクションのどの組み合わせも使用できます。たとえば、以下の組み合わせは有効です。
en
,du
:en
,ex
:du
,ex
:en
,du
,ex
:
コンマ区切りリストにおいては任意の順序でアクションを組み合わせることができます。たとえば、en, du:
は du, en:
と同じ結果になります。
無効な組み合わせ
同じタイプのアクションを 2 つあるいはそれ以上組み合わせることができません。たとえば、以下の組み合わせは無効です。
en
,en
:ex
,en
,ex
:du
,du
,ex
:
同じタイプの複数のアクションを組み合わせる場合、チャートはそのアクションを 1 回に限り実行する旨の警告を表示します。
組み合わせアクションの実行の順序
ステートは、以下のように個別のアクションを実行するのと同じ順序で組み合わせアクションを実行します。
最初に
Entry
アクションを、ステートに表示される順番で上から下に実行次に
During
アクションを上から下に実行最後に
Exit
アクションを上から下に実行
アクションを組み合わせる順序はステートの実行動作に影響しません。以下に例を示します。
組み合わせアクション | 実行順序 |
---|---|
|
|
|
|
|
|
|
|
ステート アクションを組み合わせるための規則
同じタイプの複数のアクションを組み合わせないでください。
entry
、en
、during
、du
、exit
、ex
などのアクションのキーワードと同じ名前のデータ、イベントまたはメッセージを作成しないでください。