◇ IF 文でエラーになる
Q:次のようなマクロを組んでいるのですが、なぜか繰り返し中にエラーになります。
:LOOP
:
GetTitle %0
IF (in "終了" %0) THEN GOTO :NEXT
ELSE GOTO :LOOP
ENDIF
:
:NEXT
A: IF 〜 THEN 〜 ENDIF の中から、GOTO で外に出てしまっているからです。インデントをつけて書き直すと、こうなります
IF (in "終了" %0) THEN
GOTO :NEXT
ELSE
GOTO :LOOP
ENDIF
KMmacro は、ブロック IF 文の終了を「ENDIF が来た」事によって判断します。ですから、この例のように GOTO で抜けてしまうと、(FOR 文の時と同様)「IF 文は続いている」と判断したままマクロを続けて、次の IF を実行することになります。これが繰り返されると、IF が幾重にも実行されている扱いになってしまい、エラーになることがあります。
これを避けるには、IF 〜 THEN 〜 ENDIF の内側以外で、GOTO を使えばいいのです。例えば次のような方法があります。
:LOOP
:
GetTitle %0
IF (in "終了" %0) GOTO :NEXT
UNLESS (in "終了" %0) GOTO :LOOP ; この例では UNLESS を使わず単に GOTO〜 でも可
ENDIF
:
:NEXT
ブロック IF 文ではない IF 文(THEN を使わない IF 文)の場合は(KMmacro からすれば「(ENDIF がなくても)1行だけで IF 文は終了」と判断できるので)、このような心配をする必要はありません。