投稿
bigslope bigslope
通常のBASICから、X-BASICで構造化プログラミングに移った身としては、GOTO文を使うのはちと気が引けるけど、使ってしまうとやっぱり楽なのよね。『GOTO文有害論』(GOTOはどこにでも行き先を指定出来るので、乱用すると流れが分かりにくい、いわゆるスパゲッティプログラムの原因になるというもの)というのは分からなくもないが、構造化にこだわると、かえって冗長なプログラムになる事もあるからねえ。
5そうだね
プレイ済み
返信[1]
親投稿
bigslope bigslope
例えばサブルーチン内で、『ある条件の時は、何も処理を行わずにそのまま抜ける』という処理を行う時、構造化プログラミングのスタイルだと、 DEF (関数名) IF (条件1) THEN PRINT "処理を行えません。終了します。" ELSE IF (条件2) THEN PRINT "処理を行えません。終了します。" ELSE IF (条件3) THEN PRINT "処理を行えません。終了します。" ELSE (処理を行う) ENDIF ENDIF END …という具合に、多重IF文の嵐になる上、ENDIFが1つでも足りないとエラーの原因になる。
0そうだね
プレイ済み
返信[2]
親投稿
ASA fusuian
昔のBASICは行番号で、どこにでも飛ばせるのが問題だったんですよね。 その点プチコンはラベルへのジャンプだから、スパゲッティといってもたかが知れてます。昔ほどGOTOに敏感になることもないかと。 ELSEIFは欲しいですけどね!
0そうだね
プレイ済み
返信[3]
親投稿
bigslope bigslope
ここでGOTO文を使えば、 DEF (関数名) IF (条件1) THEN PRINT "処理を行えません。終了します。" GOTO @END ENDIF(以下、条件毎に同じ処理) (各種処理を行う) @END END 処理が出来なければ、一番最後に飛ばしてしまえば良いので、多重IF文にならず、非常にスッキリする。
0そうだね
プレイ済み
返信[4]
親投稿
bigslope bigslope
…もうやだMiiverseの字数制限。どこまで削れば投稿出来るのよ?
0そうだね
プレイ済み
返信[5]
親投稿
抜けるだけで関数ならその場でRETURNする方が手っ取り早いというか良いと思いますよ。まあ関数でも入口一つの出口一つ派の人には怒られるかもしれませんが…
0そうだね
プレイ済み
返信[6]
親投稿
たしかにELSEIFが無いのは困りますね〜。なので余計にGOTO使いたくはなりますね。
0そうだね
プレイ済み
返信[7]
親投稿
bigslope bigslope
あるいは、WHILE~WENDは、BREAKでいつでも抜け出せる事を利用して、 WHILE 1 IF (条件1) THEN PRINT "処理を実行出来ません。終了します。" BREAK ENDIF(以下条件毎に同じ処理) (処理) BREAK WEND …うーん、ループしない処理なのに、ループ命令を使うというのも美しくないなあ。
0そうだね
プレイ済み
返信[8]
親投稿
けい kei0baisoku
適切なGOTOが分かりやすくなるのは同感です(^^) BASICならなお馴染みもありますし。 関数を抜けるのは、BASICでもほかの言語でも普通にRETURNだと思います。 breakを使うための空ループは、実際に時々使ってます(´ω`) 最初は抵抗あったのですが、意図をちゃんとコメントで書いておけば特に混乱もないので、まあありかなと言う感じです。 '途中でbreakするためのダミーループ REPEAT : UNTIL FALSE
0そうだね
プレイ済み
返信[9]
親投稿
けい kei0baisoku
で、else if ですが、実はプチコンでも使ってます………(´ω`;) IF TYPE==3 THEN : ELSE IF TYPE==5 THEN : ELSE IF TYPE==10 THEM : ELSE : ENDIF ENDIF ENDIF 特に最後のENDIFコンボが何事だよ!?って感じになってますが、それでもこっちの方がすっきりしたのでそういうもんだと割りきって……… ベテランの方々に怒られそう(´ω`;)
0そうだね
プレイ済み
返信[10]
親投稿
べー mmmggg
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
0そうだね
プレイ済み