私の場合、IF分の使用を避ける傾向があります。例えば、次のような感じです。
B=BUTTON()
IF(B AND #LEFT)!=0 THEN DEC X
IF(B AND #RIGHT)!=0 THEN INC X
↓
B=BUTTON()
INC X,((B AND #RIGHT)!=0)-((B AND #LEFT)!=0)
IF X<399 THEN INC X
↓
INC X,(X<399)
30年前当時の8ビットパソコンのBASICでは、IF文より論理演算の方が高速であると信じられており、ベー○ガでもこのプログラミング手法を推奨していたので、私にとって習慣化したものと思われます。
みなさんそれぞれ書き方にクセや、こだわり、分かりやすい書き方がありますね。
私の場合、色指定はコンソール画面以外は16進数で指定します。ガイドブックのカラー見本が16進数でしか書いてないので。
BU=BUTTON()、IF BU AND #UP THEN~のようにボタン関係は定数リテラル使ってます。OPTION STRICTはある方にお勧めされて使うようになりました。増分や減分はINC、DECを使ってます。1行に書く文はできるだけ少なくしてます。IF文で長くなる時はTHENの後に改行して、ENDIFで締めてます。こんな感じでしょうか。面白いのでもうしばらくトピックを受け付けています。みなさんの興味深いコメントありがとうございます。
いや、まあそれは(FOR ループで呼び出した先のルーチンで、そのFOR ループで使用したカウンタを使わなければいいというのは)そうなんですけどね。
ただ、そうすると各定義毎で常に「あれ、このカウンタ(I)って使ったっけかな?」と気にしないといけなくなったり、もしくは、各定義毎に専用カウンタを準備しないといけなくなったりして、ユーザー定義のメリットが半減しちゃう。
そういう意味で、各定義内でカウンタ変数を宣言するのは必須なんですが、その書式として、
FOR DIM I=0 TO 9
みたいな書き方を許してくれればいいのになぁ、という愚痴でした。
ケインさんの言うようにユーザー定義命令/関数のループ変数で変数を宣言するのはちょっと面倒ですよね。ただスコープを考えるとローカル変数にしたいところではありますので僕もFOR VAR I=0 TO 9としたくなることがあります。
おかっぺBEERさんのIFの時のルールは意味合いはよくわかるし、僕もそれを試したことはあるんですが、どうも比較対象が左側の方に慣れてしまっていて馴染めませんでした…。この辺(比較演算子)はあまさと しおんさんのような感じにしちゃってますね。
gosub は def で書き換え可能。
goto は
ループ目的ならば while/repeat/for 等で書き換え可能。
処理の分岐目的ならば if then else endif で書き換え可能。
on x gosub は call sub$[x] で書き換え可能。
on x goto は if x==1 then .. elseif x==2 then .. endif で書き換え可能。
goto/gosub使うなと言ってる訳じゃないですよ。人それぞれスタイルがあるので、無理に変える必要はありません。
私の場合は def 無しでプログラムは書けないので、もしプチコンから def が消えたらプチコン捨てます。実際プチコンmkIIは買って一度もプログラム作らなかったし。
私はこんな感じでループを使い分けています
GOTO・・・最速、最短
WHILE~WEND・・・条件付きループでは最短
FOR~NEXT・・・回数が決まっているループでは最短
ON GOTO・・・条件付きループでは最速(比較演算子を使う場合はREPEAT~UNTILが最速)
ちなみに無限ループはこのように記述できます。
WHILE 1~WEND
REPEAT~UNTIL 0
FOR I=0 TO I+1~NEXT