Try-Catch
[次の代替手段を試行] エラー処理をターゲット トライ ステップへの明示的な [次のステップ] リファレンスと併用すると、ステップは名前で識別されます。ほとんどの場合、ターゲット ステップとその名前の細かい区別は重要ではありませんが、Java や C# の try-catch 構文に似た、例外処理機能を提供するのに悪用される可能性があります。
これらのプログラミング言語では、"try" と "catch" の間にあるコードのセクションには、特別なエラー処理があります。このセクションで特定のエラーが通知された場合 (名前付きの「例外」を「スローする」ことで)、同様に名前をつけた "catch" に続くコードの一部が実行されます。try-catch 構文は入れ子にできるため、名前を付けた「例外」は必ず一致する名前が付いた最も内側にある "catch" により処理されます。例:
try {
... code ...
try {
... inner code ...
throw new E(); // caught by innermost "catch"
}
catch (E e) {
... inner handling code ...
}
... more code ...
throw new E(); // caught by outermost "catch"
}
catch (E e) {
... outer handling code ...
}
ロボットでは、同じようなことをトライ ステップで行うことができます。「次のステップ」で選択されるトライステップ名は、(現在の実行パス上にある) 選択された同じ名前のトライステップの直ぐ側の次のステップを指していることを覚えておきましょう。同じ実行パス上であっても、複数のトライ ステップに同じ名前を使うことが許されています。したがって、各 try-catch 構文は、「例外」と同じ名前のトライ ステップでモデル化されます。トライ ステップには 2 つの分岐があり、1 つは "try" 構文のコード部分、もう 1 つは "catch" 構文のコード部分用です。
![Try-catch ロボットのサンプル](../../All_Images/TryCatchRobot.png)
Java/C# 構文と Design Studio の用語は、以下の表のように対応しています。
Java / C# 構文 |
Design Studio で使用される要素 |
---|---|
try { ...code...} |
トライ ステップの 1 番目の分岐 (コードに対応するステップ) |
例外の名前 |
トライ ステップの名前 |
throw new E() (トライのコード中) |
E における [次の代替手段を試行] によるエラー処理 |
catch E { ...code...} |
"E" という名前のトライ ステップの 2 番目の分岐 (コードに対応するステップ) |
したがって、中心となる考え方は、トライ ステップをエラー処理に使うときは、処理するエラー状況の名前からトライ ステップに名前を付けます。メリットは以下のとおりです。
- 名前を付けると、各トライ ステップの目的を明確にできます。
- エラーが一般的なレベルで (ロボットで左側にあるトライ ステップを使用して) 処理されたとき、場合によっては (同じ名前の 2 番目のトライ ステップを使用して) 特殊な処理をするのが簡単になります。