On...GoTo ステートメントを使用した条件付き制御渡し

分岐ステートメントの On...GoTo は、条件に基づいて制御を移します。

構文は次のとおりです。

On expression GoTo label, [ , label ]...

このステートメントは、expression の値に基づいてジャンプ先のラベルに制御を移します。expression が 1 であれば最初の label へ、expression が 2 であれば、2 番目の label へ、というように制御が移ります。

On...GoTo とそのジャンプ先のラベル付きステートメントは、同じプロシージャ内になければなりません。制御のフローは実行時に決まります。

次のサブルーチンは On...GoTo を使用して、LotusScript® の 2 つの単純なパフォーマンステストのいずれかを実行します。入力ボックスに 1 か 2 を入力することにより、Do ループの 1000 回繰り返しの時間測定と、1 秒間に実行される Yield ステートメント数のカウントのどちらかをユーザーが選択します。スクリプトは On...GoTo を使用して選択されたテストへ分岐して実行し、結果を表示します。

Sub RunPerfTest
   Dim directTempV As Variant, directTest As Integer, _
     i As Integer
   Dim startTime As Single
SpecTest: directTempV = InputBox$(|Type 1 for iteration
      time, or 2 for # of yields:|)
   If Not IsNumeric(directTempV) Then Beep : GoTo SpecTest
   directTest% = CInt(directTempV)
   If directTest% < 1 Or directTest% > 2 _
      Then Beep : GoTo SpecTest
   i% = 0
   ' Branch on 1 or 2.
   On directTest% GoTo TimeCheck, ItersCheck
TimeCheck: startTime! = Timer()
   Do While i% <= 1000
      i% = i% + 1
   Loop
   Print "Time in seconds for 1000 iterations: " _
       Timer() - startTime!
   Exit Sub
ItersCheck: startTime! = Timer()
   Do
      Yield
      i% = i% + 1
   Loop While Timer() < startTime! + 1
   Print "Number of Yields in 1 second: " i%
End Sub
Call RunPerfTest()

サブルーチン RunPerfTest を 3 回実行した結果は、LotusScript を実行しているコンピュータの速度にもよりますが、次のような結果になります。

' Output:
' (With input 2)  Number of Yields in 1 second:  975
' (With input 1)  Time in seconds for 1000 iterations:  .109375
' (With input 2)  Number of Yields in 1 second:  952