Try...Catch...Finally ステートメント

例外処理ステートメントでは、既定のエラー処理メカニズムをバイパスし、エラー後のイベントのシーケンスをコントロールできます。Intent 言語では、これは Try...Catch...Finally ステートメントから行います。

Try 句は 1 つの Try ブロックと、その後に続く任意の数のオプションの Catch ブロックと、1 つの Finally ブロックで構成されています。単純な Try...Catch...Finally ステートメントの構文を以下に示します。

Try
   [<statements>]
[Catch [identifier]
   [<statements>]]
[Finally
   [<statements>]]
End Try

Try ブロックに記述されたステートメントが実行されます。評価中に例外が発生した場合、Catch ブロックが検査され、例外と一致するかどうかが確認されます。Catch ブロックが例外と一致した場合、Catch ブロックのステートメントが評価されます。Try ブロックまたは Catch ブロックが終了すると、例外が発生して処理されているかどうかにかかわらず、Finally ブロックが実行されます。

注: Try...Catch...Finally ステートメントには、少なくとも 1 つの Catch ブロックまたは Finally ブロックが記述されている必要があります。

Catch 句

Try ブロックで例外が生成されると、存在する場合は Catch ブロックが順次確認され、例外を処理できるかどうかが判断されます。一致する最初の Catch のみがステートメントを実行されます。

構文:

Catch [identifier]
   [<statements>]]

Catch 句で指定された識別子は、システム デザイン エラーから派生する必要のある、エラー パーツのデザインを示します。したがって、Catch Error はいずれかの例外と一致します。

Finally 句

Finally ブロックは、Try ブロックが終了するか、選択した Catch ブロックが終了したときに実行されます。少なくとも 1 つの Catch ブロックがある場合、Finally ブロックは省略可能です。

構文:

[Finally
   [<statements>]]

次の例では、Try ブロック内のステートメントが荷重パラメータを制限と比較します。荷重の値が制限を超えない場合には、Try ブロックが終了し、Finally ブロックのステートメントによりシステム メッセージが出力され、ループが繰り返されます。荷重の値が制限を超える場合には、例外が生成されプログラムの実行が中止されます。ただし、プログラムが中止される前に、Catch ブロックのステートメントにより実行を中止する前のシステム メッセージが出力されます。

Parameter Rule unitWeight As Integer = 5

Rule load As Number
   Dim counter As Integer = 1
   Dim limit As Number = 25.0
   Dim strItem As String = " item."
   Do
      If counter > 1 Then
         strItem = " items."
      End If
      load = load + unitWeight
      Try
         If load > limit Then
            Error()
         End If
      Catch Error
         printValue("ERROR: Load limit exceeded! Load = " + stringValue(load) + _
            "kg. Program execution halted.")
         Error("ERROR: Load limit exceeded!", " Load = " + stringValue(load) + _
            "kg for " + stringValue(counter) + strItem + " " + _
            stringValue(limit) + "kg limit exceeded!")
      Finally
         If load <= limit Then
            printValue("Load = " + stringValue(load) + _
               "kg for " + stringValue(counter) + strItem)
         End If
      End Try
      counter = counter + 1
   Loop Until counter > 10
End Rule

Exit ステートメントを使用することで Try...Catch ステートメントを終了できます。

注: 詳細については、「Exit ステートメント」を参照してください。