例えばサブルーチン内で、『ある条件の時は、何も処理を行わずにそのまま抜ける』という処理を行う時、構造化プログラミングのスタイルだと、
DEF (関数名)
IF (条件1) THEN
PRINT "処理を行えません。終了します。"
ELSE
IF (条件2) THEN
PRINT "処理を行えません。終了します。"
ELSE
IF (条件3) THEN
PRINT "処理を行えません。終了します。"
ELSE
(処理を行う)
ENDIF
ENDIF
END
…という具合に、多重IF文の嵐になる上、ENDIFが1つでも足りないとエラーの原因になる。
ここでGOTO文を使えば、
DEF (関数名)
IF (条件1) THEN
PRINT "処理を行えません。終了します。"
GOTO @END
ENDIF(以下、条件毎に同じ処理)
(各種処理を行う)
@END
END
処理が出来なければ、一番最後に飛ばしてしまえば良いので、多重IF文にならず、非常にスッキリする。
あるいは、WHILE~WENDは、BREAKでいつでも抜け出せる事を利用して、
WHILE 1
IF (条件1) THEN
PRINT "処理を実行出来ません。終了します。"
BREAK
ENDIF(以下条件毎に同じ処理)
(処理)
BREAK
WEND
…うーん、ループしない処理なのに、ループ命令を使うというのも美しくないなあ。
で、else if ですが、実はプチコンでも使ってます………(´ω`;)
IF TYPE==3 THEN
:
ELSE IF TYPE==5 THEN
:
ELSE IF TYPE==10 THEM
:
ELSE
:
ENDIF ENDIF ENDIF
特に最後のENDIFコンボが何事だよ!?って感じになってますが、それでもこっちの方がすっきりしたのでそういうもんだと割りきって………
ベテランの方々に怒られそう(´ω`;)
BREAK用のループはFORが便利だったりすることも
FOR I=0 TO 0
IF (条件1) THEN BREAK
IF (条件2) THEN BREAK
IF (条件3) THEN BREAK
NEXT
IF I THEN
正常時の処理
ELSE
異常メッセージ
ENDIF
実質フラグを立ててるのと同じですが
「ループ数を見てるだけだもん!」と言い張れないこともないという利点がありますw