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


HSPTV!掲示板


未解決 解決 停止 削除要請

2008
1011
inin無限ループには、どちらが向いているか?5解決


inin

リンク

2008/10/11(Sat) 11:29:00|NO.20038

無限ループを使おうと思っています。

「repeat 〜 loop」を使う方法と「*start 〜 goto *start」を使う方法がありますが
どちらが(無限ループに)向いていますか?

ネット上でも、repeatを使う場合とgotoを使う場合があるようですか。



この記事に返信する


tumo0b

リンク

2008/10/11(Sat) 11:33:23|NO.20039

while
wend
もありますよ



SYAM

リンク

2008/10/11(Sat) 11:49:01|NO.20040

repeat〜loopだと、
ループ中にラベルがあると、ループの外からそのラベルにジャンプした時に
repeatを通らずにloopに突っ込むのでエラーになります。
逆に、ループ内の途中からloopを通らずにループから抜けることもできません。

goto〜ラベル ならそういうこともありません。
条件によってループの戻り先が変わるとかも、し放題です。
また、途中から抜けても一応安全です。


※もっとも、そのような設計にすると流れがわかりにくくなるので、
 repeat〜loopでエラーにならないようなスクリプトにする、のが
 いちばん良いとも考えられますけれど。



check

リンク

2008/10/11(Sat) 13:32:23|NO.20043

gotoの方が若干早いって聞いたような・・・



レノス

リンク

2008/10/11(Sat) 14:59:45|NO.20046

repeat loop は goto で突入と脱出ができませんし、
ラベルだと、色分けされないので目立たないという
(変な)理由で while を使います。

以上、ラベル嫌いな自分の意見。

> check さん
repeat が最速のようです。


#uselib "winmm.dll" #cfunc timeGetTime "timeGetTime" #define times 300000 #define _WAIT await 0 // ラベル lb = timeGetTime() *start : _WAIT : i ++ : if ( i < times ) { goto *start } lb = timeGetTime() - lb i = 0 // 繰り返し re = timeGetTime() repeat times : _WAIT : loop re = timeGetTime() - re // while wh = timeGetTime() while i < times : _WAIT : i ++ : wend wh = timeGetTime() - wh i = 0 // while() whp = timeGetTime() while (i < times) : _WAIT : i ++ : wend whp = timeGetTime() - whp i = 0 mes "*LABEL : "+ lb mes "repeat : "+ re mes "while : "+ wh mes "while(): "+ whp stop
・ウェイトをかけるときに限り、while() の方若干速いという謎のデータが出た。
・#define で作ったユニークラベル *%i は高速。
・ローカルラベルは普通。

大切なのは、速度よりも見やすさ・使いやすさだと思いますが。



inin

リンク

2008/10/12(Sun) 11:53:59|NO.20056

とりあえず、エラーさえなければ「repeat〜loop」方が良いって事ですね。

ありがとうございました。



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