2023-11-06 02:27 PM
いろいろと検証して問題は無いように思うのですが、使い方として合っているか教えてください。
リファレンスによると内部サブルーチンを呼び出して何度も使えるようですが、RETURNとENDが必ず必要?
①~⑦まで検証しておりますが、⑥は?です。
通常は⑦のような使い方が合っているのでしょうか🤔
(GOSUB(1001、1002)を上に記載して、サブルーチンを下に記載する)
①(1001)を表示しようとしたが、ENDを記載しなかったらエラーになる。(1001)は表示される。
②ENDを記載したら、エラーが解消されました。
③同じスクリプト(1001)を再利用し、回転させて表示しました。(問題なし)
④別のスクリプト(1002)を配置したいが、(1001)でENDにしているので、表示されない。
⑤(1001)のENDを消すと、エラーになるし、(1002)も表示されない。
⑥GOTOで無理やり飛ばすと、エラーにならず問題なし。
⑦GOTOを消して、スクリプトの順番を変える(1001を下に記載する)と、問題なし。
解決済! 解決策の投稿を見る。
2023-11-07 02:18 PM
ENDは『本文』『サブ構文』を分けるライン引きとして使われます。
gosubとENDがセットなのは
gosubがサブ構文にジャンプする動作をしたいのに対して
本文とサブ構文の境目がENDで定義していないため
サブにジャンプするって言われたけど、サブってどこからですか?とエラーが出ています
(①~③、⑤について)
⑥については
GOTOの後にENDが定義されているため、特にエラーは出ないです
また「1001:」や「1002:」のような数字とコロンの組み合わせについて
『ここが1001番の場所だよ!』とプログラム側に認識させる記号のようなものなので
gosubやGOTOがなくても実は問題ないです
(ただしgosubやGOTO側からすると、無いと動きません)
RETURNについては記載がなくてもエラーが出ないです
ただし、サブ構文から本文へ戻らないという状態になっているため正しく動作はしてない状態です
---------
プログラムA
gosub 1
プログラムB
END
1:プログラムC
---------
上記の場合、サブ構文から本文にRETURNしていないのでプログラムBが動作しない
2023-11-07 02:18 PM
ENDは『本文』『サブ構文』を分けるライン引きとして使われます。
gosubとENDがセットなのは
gosubがサブ構文にジャンプする動作をしたいのに対して
本文とサブ構文の境目がENDで定義していないため
サブにジャンプするって言われたけど、サブってどこからですか?とエラーが出ています
(①~③、⑤について)
⑥については
GOTOの後にENDが定義されているため、特にエラーは出ないです
また「1001:」や「1002:」のような数字とコロンの組み合わせについて
『ここが1001番の場所だよ!』とプログラム側に認識させる記号のようなものなので
gosubやGOTOがなくても実は問題ないです
(ただしgosubやGOTO側からすると、無いと動きません)
RETURNについては記載がなくてもエラーが出ないです
ただし、サブ構文から本文へ戻らないという状態になっているため正しく動作はしてない状態です
---------
プログラムA
gosub 1
プログラムB
END
1:プログラムC
---------
上記の場合、サブ構文から本文にRETURNしていないのでプログラムBが動作しない
2023-11-07 02:42 PM
非常にわかりやすく、丁寧な解説ありがとうございます!!
2023-11-07 02:55 PM
自分もあまり使い慣れてないのでよくエラーを頻発しています・・
経験談となりますが、gosub等のサブルーチン内での座標移動を行った場合は
RETURN前にDELを使用して、サブルーチン内で変換スタックを±0に戻した方が後々のメンテナンスのときに楽です!
ただし、DELTOPを使用してしまうと、それ以前の座標移動も消えてしまうので
自分は基本的に使わないようにしています・・・・