AX

電霊ログ

私のやってるサイト、電子の言霊の活動ログ

カテゴリークラウド

タグリスト

最近のトラックバック

月別アーカイブ(タブ)

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。
  • [HSP超入門] 繰り返し8

今まで結構やってたのにプログラム系の文章を理解するのに大事な事を教えるの忘れていました、
HSPなどのインタープリタ言語で書かれたプログラム文の事を「スクリプト」と言います。
そしてそれを保存したものを「スクリプトファイル」と言います。
HSP3の場合 ファイル名.hsp という拡張子のファイルの事です。

拡張子とはファイルの種類をあらわすファイル名の最後についている .hsp などの文字の事で、ウィンドウズの初期状態では表示されていないかも知れませんが、これはウィンドウズの設定によって表示させる事が出来ます。ないと色々不便なので ぜひ表示させておきましょう。

ちょうどいい機会なのでついでにもう一つ。
HSPに限らずもっと一般的なプログラミング言語ではプログラムの書かれた文章の事をソースコードと言い、単に ソース や コード などと呼ぶ事もあります。そういう理由でHSPで書かれたスクリプトの事もその様に呼ばれる事があるため覚えて置きましょう。

少し前に continue 命令を使ったのを覚えてますか?
continue 命令は repeat などの繰り返し命令の中で、実行ぎょうを先頭に戻す命令でしたね。
その時にはこの様に、
「continue サンプル1」

repeat 10
if (cnt>=2) & (cnt<=5) :continue
mes cnt
loop


パラメーターを何を付けずに使用していましが、実は contimue 命令にもパラメーターを指定する事が出来ます。

(この上のプラグラムでは、パラメーターを付けずに使うと、システム変数の cnt が1ずつ増えてくれるので それを利用して、0から1つずつ順番に if で見て行き 特定の回になったら continue で飛ばして つぎへ行くという作業をしています)

continue にパラメーターを付けて実行すると、実行ぎょうを先頭に戻し、さらにシステム変数 cnt の内容を変更する事が出来ます。
たとえば、continue 3 とすると、cnt の内容は 3 になります。
「continue サンプル2」

repeat 10
if cnt=2 :continue 6
mes cnt
loop


このプログラムは最初のプログラムと結果は同じですが、やり方が少し違います。
最初のプログラムでは10回のループ全てをみはって1つずつ処理を飛ばしていましたが、2つ目のプログラムでは cnt が 2 になった時点で continue 6 によって実行ぎょうが移動し cnt が 6 に変わっているので、10回のループのうち 2,3,4,5 回目は実行すらされていません。


とここで、ふと思った方も居るかも知れませんが、どうして最初に continue をやった時 一緒に説明しなかったのかと言うと、それは無限ループを説明していなかったからです。
一見 無限ループとは関係なさそうに見えますが、continue のパラメーターに指定する値によっては なんと無限ループになってしまうのです。
「無限ループになるスクリプト」

repeat 10
wait 10
if cnt=5 :continue 2
mes cnt
loop


とりあえずこれを実行してみて下さい。無限ループになりますが、反応しなくならないように wait を入れています。
すると 0,1,2,3,4,2,3,4,2,3,4 ... と4を超えられずに2~4を繰り返しているのが分かります。なぜこれで無限ループになってしまうのかというと、それは凄く簡単な事です、
この repeat 命令は、何回繰り返したかと言うより cnt が指定した回数にいたったかどうかでループを抜けているので、continue で現在の cnt より少ない数を指定してしまうと常に cnt が戻されてしまい、永遠に指定回数と一致しなくなるため無限ループにおちいってしまうのです。
ですので continue に引数を指定する時は現在の cnt より多く指定するか、if を使って別の条件でループを抜ける様にしなければいけません。

今回はあらかじめ無限ループになる事が分かっているので wait を入れて回避できていますが、普段のプログラミングでは無限ループを作るつもりなんて普通はありません。そのために知らずに wait を入れずに無限ループ作ってしまい固まる事があるので、回避のしようがありません。もうこれは気を付けるしかないです。
私も未だに無限ループよく作るもん(笑・・・えない)
関連記事

コメント

コメントの投稿

   管理者にだけ表示を許可する
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。