N88-BASICでは一度制御が通過するとGOTO/THEN/GOSUBの行番号は探索された後にポインタで置き換えられて、以後は探索無しで飛べるようになる、はずです。しかし、同時期の他のパソコンBASICは毎回探索するはずです。
プログラムの前後、と言うと書いた順か制御の進行方向かで真逆で、普通は行番号の若い方が「前」です。ややこしいので、以下、上下で表現します。マイナーな表現なので他文献を見る時はご注意下さい。
(1) 行番号からポインタに付け替えが起こらない場合
探索は、目標の行番号が現在の行番号よりも大きい場合は、次の行から下へ、つまりプログラムの末尾に向かって探索されます。ですから下へ向かう場合は近いほど探索が早く終了します。
目標の行番号が現在の行番号よりも小さい場合は、プログラムの最上位、つまり冒頭から下へ探索されます。この場合は冒頭に近いほど早く探索が終了します。
IF-THEN-ELSEの構造だと、素直に書くと、THENの行番号は下になり、IF文の直後からのELSE節の末尾からENDIF相当の場所へ飛ぶGOTOも下になり、どちらも比較的近くに飛びます。ですから、ここはあまり心配ないです。
しかしループは一回の終了時に上に跳ぶので、近くでも探索に時間がかかるかもしれません。
そこで、パソコンBASICでは繰り返し処理のためにFOR文とWHILE文が用意されています。どちらもスタック上に専用フレームが作られ、ループの先頭と末尾へのポインタが入っています。FORの場合は追加で制御変数へのポインタが保持されます。STEP値と終値も入っていて、整数型と単精度浮動小数点数型があって、したがって、制御変数を整数型にしておくと若干高速になるはずです。
つまり、ループはできる限りFOR-NEXTまたはWHILE-WENDを使うべきだ、ということ。FORの制御変数は普通は単純なカウントか配列の要素指定に使います。その他の場合にWHILEを使います。
呼び出すサブルーチンはできるだけ下の近くに配置するのが良いです。
(2) 行番号からポインタに付け替えが起こる場合
上方へのGOTOが気兼ねなしに使えるようになるので、GOTOを使って単純ループを組んだり、THENの飛び先をループの先頭とみなして、PASCALのrepeat-until (C言語のdo-while)相当が気軽に書けます。
サブルーチンの位置は任意の場所でOKです。
とは言っても、FOR文は便利なので、積極的に使う人が多いと思います。
ところで、WHILEは、私はFORTRAN 90の解説書で、最適化を著しく損なうために使うな、との文章を見たことがあり、しかし、その理由を書いた文章は見たことがありません。
なので想像になりますが、フローチャート化すると分かるようにWHILEは制御がループの末尾で袋小路になっていて、終末時には2回のGOTO相当が追加されます。repeat-untilの方がよほど単純で、しかしFORTRANにあったかな。単純ループはあったと思います。
フローチャートにすると同様の構造に見えるFORTRANのDO文がむしろ推奨されているのは、制御変数が特別扱いで、ループ内で更新してはいけないので、DOの入り口で繰返し回数が決定できるので、最適化は容易、との理由のようです。PASCALのFORも同様。
C言語には制御変数の概念が無く、FOR文はいわゆるシンタックスシュガーです。ところが、FOR(;;){}と書くと{}の中身が単純ループになるためか、あまり最適化の障害になるとかの話は聞いたことがありません。私はこのfor(;;)は多用します。脱出にはbreak文を使います。
パソコンBASICでも制御変数の特別扱いは無いはずですが、インタプリタの構成から、速度的には些細な話になってしまうので、FORは推奨されるはずです。同様の理由でWHILE-WENDは積極的に使って構わないです。
あと、C言語のswitch-caseの多重分岐に相当するのは、ON n GOTO ...です。あまり使った記憶が無いのですが、効率的には素直に下に飛ぶなら良好なので、必要時には、ためらわずに使って良いと思います。