HSPポータル
サイトマップ お問い合わせ


HSPTV!掲示板


未解決 解決 停止 削除要請

2007
0201
HiRoSHigotoとgosubの違い7解決


HiRoSHi

リンク

2007/2/1(Thu) 01:31:20|NO.5340

最近、hspを知り勉強し始めた初心者です。

タイトルのとおりなのですが、buttonなどでラベルに飛ぶときなどの場合goto,gosubの違いは

なんなのでしょうか。



この記事に返信する


Irisawa

リンク

2007/2/1(Thu) 01:42:02|NO.5341

違いも何もヘルプにも書いてあるとおりそのままなのですが...。
on系命令(on/onclick/oncmd/onerror/onexit/onkeyなど)やbuttonなどは省略した場合は
gotoが指定されたと仮定されます。
gosubを使用したい場合のみgosubを指定してください。
また、サブルーチンでは必ずreturnしてください。
stopなどで止めてしまったりgotoで飛ばすとネストがおかしくなってエラーになり事も
ありますので、ご注意下さい。



HiRoSHi

リンク

2007/2/1(Thu) 03:13:04|NO.5342

すいません。説明が不足していました。

文法というより、サブルーチンというのがいまいちわからない状態です。



Irisawa

リンク

2007/2/1(Thu) 04:06:50|NO.5343

サブルーチンの何が分からないのでしょうか。
付属のマニュアルなどをご覧下さい。


;メインルーチン *main mes "メインルーチンです" gosub *sub mes "サブルーチンから戻りました" stop ; サブルーチン *sub mes "-->サブルーチンです" return



KIMU

リンク

2007/2/1(Thu) 04:48:37|NO.5344

通常のgosubは gosub *ラベル から *ラベル に飛び
return で gosub *ラベル の次の命令に移る

buttonのgosub *ラベル はボタンが押されていたら
stop、awit、wait が実行された時に *ラベル に飛び
return で、飛んでくる元の場所(stop、awit、wait)に戻る
(wait系は実質次の命令)


//ボタンは一度作ったら cls、clrobで削除、picload等でウィンドウが初期化されるまで消えない button gosub "ラベルA",*ラベルA ;ここからラベル行まで飛ぶ訳では無い(ここではボタンを表示させているだけ) button goto "終了",*終了 ;終了ボタン表示 repeat gosub *ラベルB ;ここを通る度に *ラベルBに飛ぶ(returnで戻ってきて次の命令に移る) //waitじゃ無くstopの場合returnでstopに戻るので次の命令には進まない await 10 ;ラベルAが押されていたら *ラベルA に飛ぶ(returnで戻って来る、残りのwaitは無視される)、終了が押されたら終了 title "ラベルA("+str(a)+") ラベルB("+str(b)+")" loop *ラベルA a++ return ;*ラベルAに飛んで来た元の場所に戻る *ラベルB b++ return ;gosub *ラベルB の次の命令に飛ぶ *終了 end



willcom

リンク

2007/2/1(Thu) 10:07:13|NO.5345

goto・・・指定したラベルにジャンプするだけ。

gosub・・・指定したラベルにジャンプする。ただし、そのラベルの終わりにはreturn命令
      を入れておく必要がある。
return・・・gosub命令のあった場所に戻る。その後は普通にgosub以降の処理となる。
      
・モジュールや関数などの様な特定の処理だけをさせるためのラベルにはgosub。
 それ以外はgoto。



*gosubの使い方

*main//メインラベル A=1 gosub *lab1 mes ""+A+"" stop *lab1//Aを2倍させるためだけのラベル A*2 return

*上の例をgotoでやると

*main//メインラベル A=1 goto *lab1 *message//メッセージを表示するラベル mes ""+A+"" stop *lab1//Aを2倍させるためだけのラベル A*2 goto *message
と、処理が複雑になり、ラベルも無駄に多くなってしまいます。



As

リンク

2007/2/1(Thu) 17:06:45|NO.5349

なんというか、

 goto は プログラムの流れを完全に gotoでジャンプしたラベル先へ移しますが、


gosub の場合は return を指定することにより gosub を定義した位置へと
戻ります。


gosub したのにreturn ぜんぜんしないでそのままプログラムを進めていったりしたら
じょじょにネストが深くなりエラーになるので、gosubしたときは必ずreturnで戻るようにしましょう。



HiRoSHi

リンク

2007/2/2(Fri) 22:05:45|NO.5376

返事が遅れてしまってすいません。

皆さんどうもありがとうございます。
なんとか理解することができました。



ONION software Copyright 1997-2023(c) All rights reserved.