さて、今回は HSP でスクリプトを組むに当たって、必ず知っておかなければならないもの、「変数」について、いろいろ書いていこうと思います。
言ってしまえば、今回は変数だけです。
※数学でいう「変数」とは同じ名前ですが、内容は違うので注意。
ではサンプルから。
x = 100
mes x
以上です。
では、上記のスクリプトをエディタに書いて、 [F5] キーで実行してみてください。
さて、どうなりましたか?
画面に、「100」という数字が表示されたと思います。mes で x の中身を表示したので。
変数(variable)とは何か、そう教えるとき、ほとんどの講座で同じような例えを出します。
「変数とは、記憶するための、名前の付いた箱」※詳しい人には「変数はメモリの塊にアクセスするためのインターフェース」と言った方がいいかもしれないですが。
※ var …… 変数を意味する英単語、variable の略
もう一度、上記のサンプルを見てください。
あれの一行目:
x = 100
は、
変数の名前には、分かりやすいものを付ける癖をつけましょう。
上記のように、 x, y, z や a, b, c, d, e, ... など、ぱっと見ただけでは、その変数に何が入ってるのか分かりませんよね?
そうすると、いちいちスクリプトの中から変数を使用している部分を探して、判断するしか無くなります。
こんなんじゃ、ろくに開発できません。
変数の名前は、しっかり内容を反映したものにしましょう。ある程度は長い方がいいです。
変数の名前には、基本的に何でも付けられますが、59文字以下である必要があります。
また、名前の始めは半角数字 (0, 1, 2 など)が使えません。
ちなみに、大文字と小文字の区別はありません。「VAR」と「var」は全く同じです。
ちなみに、日本語を含め、全角文字も変数名に使えます。
変換がめんどくさいので、僕は使っていません。
もっと変数を使ってみましょう。
下のサンプルにある「; (セミコロン)」は、
「この行の、; 以降は無視してください。」
という意味で、コメントと言います。
これを書いておくと、スクリプトの読みやすさがグッと上がります。出来れば書くようにしましょう。
「;」と同じ意味で、「//」という記号も使えます。僕はもっぱらこちらを使います。
たくさん説明が書きたいときは「/* 〜 */」という記号も使えます。
これは、複数行に渡ってコメントに出来ます。エディタの色分けがちょっと変ですが、それは気にしなくてもかまいません。
; まずは代入から x = 50 y = 30 pos x, y ; 変数を使います mes "変数のテストです" pos x + 60, y + 50 ; 計算も出来ます mes "x = "+ x +" y = "+ y
こんな感じです。
また、変数の内容を変更することも出来ます。
余談的な位置に書いていますが、重要なことです。
上のサンプルの次のような式に、違和感があるかもしれません。
mes "x = "+ x +" y = "+ y
この「"文字列" + 数値」という式ですが、文字列に数値を足すことは、普通に考えると出来ません (プログラマの考え方での「普通」ですが)。
しかし、HSPには次のようなルールがあるので、可能なわけです。
式の最初の値と違う型の値は、すべて最初のと同じ型に変換される。どういうことかというと、「文字列+数値」は、後ろの数値を文字列に変換して、「文字列+文字列」になるのです。
「変数」という名称では、数値しか代入できない気がします。
これは数学から持ってきた言葉なので、こんな名称なのですが、英語では「variable = 変わることのできるもの」という意味で、数値はあんまり関係ありません。
というわけで、当然 "文字列" のようなデータも代入できます。
以下、そのサンプル。
; まずは代入から Posx = 20 Posy = 30 message = "Posx = "+ Posx +"、Posy = "+ Posy ; 表示する文字列 pos Posx, Posy mes message Posx = Posx + 100 ; Posx + 100 すなわち 20 + 100 = 120 を Posx に代入 Posy = Posy * 3 ; Posy * 3 すなわち 30 * 3 = 90 を Posy に代入 message = "Posx = "+ Posx +"、Posy = "+ Posy pos Posx, Posy mes message Posx += 20 ; a += b は、a = a + b の略。つまり Posx = Posx + 20 Posy -= -20 ; -= も同じ。-20 を引く、つまり +20 する。 message = "Posx = "+ Posx +"、Posy = "+ Posy pos Posx, Posy mes message Posx ++ ; 特殊な書き方。Posx = Posx + 1 と同じ。 Posy -- ; マイナスのバージョン。 message = "Posx = "+ Posx +"、Posy = "+ Posy mes message
※pos 命令については無視すること!
いろいろ演算子についても説明をいれておきました。
さて、次から若干ランクアップです!
変数にも、性格があります。性格と言っても、
型名 | 内容 |
---|---|
*label (ラベル型) | ラベル位置(後述) |
str (文字列型) | "文字列" |
double (実数型) | 数値 (実数値) |
int (整数型) | 数値 (整数値) |
struct (モジュール型) | (当分知らなくていい) |
comobj (COMオブジェクト型) |
(知らなくていい) |
variant (ヴァリアント型) |
(知らない Σ(@o@) ) |
この、「型名」 が 「変数の性格」 です。( struct 型以降の3つは後述 )
性格というよりかは、性質といったほうが近そうです。
見ての通り、性質(型)によって、代入できるものが違いますね。
当然のごとく int型変数に"文字列"を代入することは出来ません。
しかし HSP では:
number = 100
number = "test"
これでもエラーを起こしません。何故でしょう?
※エラーが起きる……スクリプトに間違いがあって、実行できないこと。たまに「HSPに怒られる」ともいう。
すごいことに、HSP では変数にものを代入するとき、代入先の変数の型が違えば、自動的に修正してくれます。
このおかげで、僕たちはあまり型を気にする必要がないのです! (気にした方がいいかも)
うれしいですね〜
ただ、修正されるのが「代入時だけ」ということに注意してください。
引数に文字列型の変数を指定しなければいけないのに
数値型の変数を指定していた場合、当然エラーが出ます。
気をつけてください。
……と思いきや、HSPの標準命令では、エラーを起こさないことがあります。
恐ろしいまでの親切心ですね。
最後に、数値型変数を指定してエラーにならなかったサンプルです。
a = 100 ; 数値型変数 (int型) dialog a, 1, "Error" ; エラー (error) が出るはず
dialog 命令が出てきちゃってます。
こんなぎりぎりに。
→ 第三章へ goto
by 上大