Main Content

ステート アクションの組み合わせによる冗長コードの削除

ステート内で同じタスクを実行する 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();

ステート アクションをこのように組み合わせることで同じチャートの実行動作 (セマンティクス) を実現し、対応する個別アクションと同じコードを生成します。

ステート アクションを組み合わせる方法

同じタスクを実行する entryduring、および/または 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 回に限り実行する旨の警告を表示します。

組み合わせアクションの実行の順序

ステートは、以下のように個別のアクションを実行するのと同じ順序で組み合わせアクションを実行します。

  1. 最初に Entry アクションを、ステートに表示される順番で上から下に実行

  2. 次に During アクションを上から下に実行

  3. 最後に Exit アクションを上から下に実行

アクションを組み合わせる順序はステートの実行動作に影響しません。以下に例を示します。

組み合わせアクション実行順序

Entry action y = 0 followed by combined entry and during action y = y+1.

  1. en: y = 0;

  2. en: y = y+1;

  3. du: y = y+1;

Combined entry and during action y = y+1 followed by entry action y = 0.

  1. en: y = y+1;

  2. en: y = 0;

  3. du: y = y+1;

Combined during and entry action y = y+1 followed by entry action y = 0.

  1. en: y = y+1;

  2. en: y = 0;

  3. du: y = y+1;

Combined during and entry action y = y+1 followed by combined entry and exit action y = 10.

  1. en: y = y+1;

  2. en: y = 10;

  3. du: y = y+1;

  4. ex: y = 10;

ステート アクションを組み合わせるための規則

  • 同じタイプの複数のアクションを組み合わせないでください。

  • entryenduringduexitex などのアクションのキーワードと同じ名前のデータ、イベントまたはメッセージを作成しないでください。

関連するトピック