hinekure.net が http://hspdev-wiki.net/ から自動クローリングした結果を表示しています。画像やリソースなどのリンクが切れています。予めご了承ください。
HspCmd/goto - HSP開発wiki
トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS

小ワザ|repeat

 HSP2.61   HSP3.0 

gotoの利用法

ループ形成

  1
  2
  3
  4
  5
  6
  7
  8
  9
 
 
 
 
 
 
 
 
 
   // repeat版
   repeat 10
     i = cnt
     repeat 10
       wait 10
       title ""+i+","+cnt
     loop
   loop
   mes "Fin."
SAMPLE 1-1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
   // goto版
 *_rep1
   if i=10: goto *_lop1
   j=0
 *_rep2
   if j=10: goto *_lop2
   wait 10
   title ""+i+","+j
   j++
   goto *_rep2
 *_lop2
   i++
   goto *_rep1
 *_lop1
   mes "Fin."
SAMPLE 1-2

SAMPLE 1-2 は SAMPLE 1-1 をgoto版に書き換えたものです。
解説おしまい。

ネストループの脱出

構造化されたループ内から任意のラベルにジャンプする場合に使います。

  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 
 
 
 
 
 
 
 
 
 
 
 
 // repeat-goto-loop版(エラー)
 *MainRoutin
   repeat
     wait 1 ; エラーで停止するけど
     repeat
       if cnt=10: goto *jump
     loop
   loop
 *jump
   title "MainLoopCount="+MLC
   MLC++
   goto *MainRoutin
SAMPLE 2-1
  1
  2
  3
  4
  5
  6
  7
  8
  9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 // while-goto-wend版
 *MainRoutin
   while 1
     wait 1
     j=0 ; 内側のループカウンタ(cntの代わり)
     while 1
//*    ; トグルコメントby月影ともさん(便利です)
       if j=10: goto *jump
/*/
       if j=10: _break
//*/
       j++
     wend
     title "_breakだと内側のループを抜けるだけ"
   wend
 *jump
   title "MainLoopCount="+MLC
   MLC++
   goto *MainRoutin
SAMPLE 2-2

SAMPLE 2-1 は2つのrepeat-loopでループが形成されています。
repeat-loopはネストレベルが管理されておりloopを通らずにgotoで強制的にループを脱出した場合、ネストレベルが適切にデクリメントされないためにrepeatとloopの対応がずれてしまいます。
この為、ネストレベルの制限を越えるとループのネストエラー(Error.9)が起きます。

SAMPLE 2-2 ではwhile-wendを使ってループが形成されています。
while-wendは内部でgotoを使ったループに書き換えられるためネストレベルは管理されていないのでネストレベルの制限はありません。
この為、wendを通らずにgotoでジャンプしても問題ありません。
while-wendは専用のループ脱出命令_break(マクロ)を用意しています。
_breakはループの1つ外に脱出するためのものなので、ネストされたループ全体の外へは脱出できません。

for-nextに関するループでも同様です。
こちらはラベルジャンプにexgotoが使われています。

例外処理

コメント


URL B I U SIZE Black Maroon Green Olive Navy Purple Teal Gray Silver Red Lime Yellow Blue Fuchsia Aqua White

トップ    編集凍結 差分バックアップ添付複製名前変更リロード   新規一覧単語検索最終更新   最終更新のRSS
Last-modified: 2009-01-24 (土) 18:51:51 (1778d)