Home -> HSP講座 -> 初級編 No.2

変数とは? (前編)

さて、今回は HSP でスクリプトを組むに当たって、必ず知っておかなければならないもの、「変数」について、いろいろ書いていこうと思います。
言ってしまえば、今回は変数だけです。
※数学でいう「変数」とは同じ名前ですが、内容は違うので注意。

ではサンプルから。

※僕の書くサンプルは自動で色分けしていますが、変数は色分けできません。
 色分けするのにも HSP が使われているんですよ (ufpad の HSPtoHTML)。昔は手打ちでしたが (^_^;)。

	x = 100
	mes x

以上です。
では、上記のスクリプトをエディタに書いて、 [F5] キーで実行してみてください。
さて、どうなりましたか?
画面に、「100」という数字が表示されたと思います。mes で x の中身を表示したので。

変数(variable)とは何か、そう教えるとき、ほとんどの講座で同じような例えを出します。

変数とは、記憶するための、名前の付いた
※詳しい人には「変数はメモリの塊にアクセスするためのインターフェース」と言った方がいいかもしれないですが。

変数のイメージ
※ var …… 変数を意味する英単語、variable の略

もう一度、上記のサンプルを見てください。
あれの一行目:

	x = 100

は、

x という名前のに、100 という数値を入れる。
という意味です。
a = b は等号ではなく、右辺の値を、左辺の変数に代入する、という命令です。
この、箱 (変数) にもの (値) を入れるという処理を、「代入する(または、格納する)といいます。

( ex1 ) x に 100 を代入する。  ex …… example (例) の略。
( ex2 ) y に 22 を代入する。
( ex3 ) z に "文字列" を代入する。
( ex4 ) db に 0.23 (実数) を代入する。( 実数 とは、小数と整数のことです )


変数名の注意

変数の名前には、分かりやすいものを付ける癖をつけましょう。
上記のように、 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には次のようなルールがあるので、可能なわけです。

式の最初の値と違う型の値は、すべて最初のと同じ型に変換される。
どういうことかというと、「文字列+数値」は、後ろの数値を文字列に変換して、「文字列+文字列」になるのです。
逆に、「数値+文字列」だと、後ろの文字列が数字(0123 ...)なら、その数値に変換されます。( それ以外なら 0 になってしまう )
このルールは、とりあえず知っておいたほうがいいでしょう。
例えば、「3.14 + 6」なら「9.14」(実数)になりますが、「6 + 3.14」なら答えは「9」(整数)です。ご注意を。


いろんなモノを代入してみよう

「変数」という名称では、数値しか代入できない気がします。
これは数学から持ってきた言葉なので、こんな名称なのですが、英語では「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 命令については無視すること!

いろいろ演算子についても説明をいれておきました。

さて、次から若干ランクアップです!


変数の性格

変数にも、性格があります。性格と言っても、

「あの変数はおとなしい。」
「その変数は変わり者だ。」
「この変数は怒りっぽい。」

とかじゃないです。
変数 gentle 「ねぇ、ねぇ。君にはなにが入ってるの??」
変数 difficult 「良いじゃん、別になんでも。」
g「そんなこと言わずに、教えてよー」
d「うっせーな! あっちいけ!」

…… difficult 君は気むずかしいようです。
そんなことじゃない?さっき言った?
じゃ、どんなことよ。

型名 内容
*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 上大

第一章へ   第三章へ