Устраните избыточный код путем объединения состояний активности

Можно объединить 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;

Допустимые комбинации

Можно использовать любую комбинацию этих трех действий. Например, следующие комбинации допустимы:

  • en, du:

  • en, ex:

  • du, ex:

  • en, du, ex:

Можно объединить действия в любом порядке в списке, разделенном запятыми. Например, en, du: дает тот же результат как du, en:.

Недопустимые комбинации

Вы не можете объединить два или больше действия того же типа. Например, следующие комбинации недопустимы:

  • en, en:

  • ex, en, ex:

  • du, du, ex:

Если вы комбинируете несколько действий того же типа, вы получаете предупреждение, что график выполняет действие только однажды.

Порядок выполнения совместных действий

Состояния выполняют совместные действия в том же порядке, как они выполняют отдельные действия:

  1. Entry действия сначала, сверху донизу в порядке они появляются в состоянии

  2. During вторые действия, сверху донизу

  3. Exit действия в последний раз, сверху донизу

Порядок, в котором вы комбинируете действия, не влияет на поведение при выполнении состояния. Например:

Совместные действияПорядок Exectution

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;

Правила для объединения состояний активности

  • Не комбинируйте несколько действий того же типа.

  • Не создавайте данные, события или сообщения, которые имеют то же имя как ключевые слова действия: entry, en, during, duвыход, ex.

Похожие темы