この項目ではHSPの変数について更に勉強していきます。
1. 変数の種類と決定
様々な種類の変数が用意されていて、最後に代入されたものがその変数の型となります。型の種類を次の表に示します。
種類 |
説明 |
初期化の例 |
整数型 |
整数を保存できる。 |
var = 10 |
実数型 |
実数値を保存できる。 |
Var = 1.5 |
文字列型 |
文字列を保存できる |
var = "string" |
ラベル型 |
ラベルを保存できる。 |
var = *label |
モジュール型 |
モジュールを保存できる。 |
扱いません。 |
COMオブジェクト型 |
COMオブジェクトを保存できる。 |
扱いません。 |
整数配列 |
整数型変数の配列 |
dim var,2,2 |
実数配列 |
実数型変数の配列 |
ddim var,2,2 |
文字列配列 |
文字列型変数の配列 |
sdim var,2,2 |
ラベル配列 |
文字列型変数の配列 |
ldim var,2,2 |
モジュール型配列 |
モジュール型変数の配列 |
扱いません。 |
COMオブジェクト型配列 |
COMオブジェクト型変数の配列 |
扱いません。 |
列挙するとこのようになります。今回の初めて出てきたものはラベル型の変数と配列型の変数です。前回扱ったラベルは実は変数として保存することが出来ます。また、すべての型に対して配列が存在します。
2. 確保と自動拡張
変数の型は最後に代入されたものによって決まると書きました。この代入のときに、変数の型に合わせてメモリの領域確保も行われます。配列の場合も同様で、代入されたところまで配列が自動的に拡張されますが、次元数によって若干動作後異なるので注意が必要です。
3. 配列変数
3.1. 配列の表記方法
配列を使うときは次のように表記します。
// 配列の書き方1
array(0) = 1
array(1) = 1
array(2) = 1
()の中に配列の要素番号を書きます。多次元配列の場合は、予想番号を「,(カンマ)」で区切って、
// 配列の書き方2
array(0, 0) = 1
3.2. 1次元配列
1次元配列の場合は代入時に常に自動的に領域が拡張されていきます。したがって、次のような書き方が可能です。
// 1次元配列の自動拡張
array(0) = 1
array(1) = 1
array(2) = 1
整数型配列変数でなくても、もちろん可能です。
// 文字列型1次元配列の自動拡張
array(2) = "srt"
この例ではarray(2)と書いたので、この時点でarray(0)からarray(2)までが確保されます。
しかし、自動的に領域が確保されるのは代入時のみなので、次のようなプログラムはエラーとなります。
// 配列の書き方1
array(0) = "srt"
mes "" + array(2)
1次元配列の型は0番目の要素によって決定されます。なので次のプログラムのようなことも出来てしまうので、注意が必要です。
// 配列の書き方1
array(0) = "str1"
array(1) = "str2"
array(0) = 0
3.3. 多次元配列
次元は4次元まで拡張可能です。しかし、自動拡張によって次元は変更されないので最初の代入時の次元数から変更することは基本的に出来ません。また、2次以上の配列では自動拡張は起こりません。最初に代入した時の各次元の要素数が最大値になります。ただし、最後の要素は要素数を増やすことが出来ます。
// 配列の書き方1
array(5, 5, 5) = 555 // 配列の要素数が決定する。
array(0, 0, 0) = 0 // これは可能
array(5, 5, 6) = 0 // これも可能
// array(5, 6, 5) = 0 // これはダメ
ただし、この拡張方法はただただ見にくいプログラムになってしまうので使わないほうが良いです。
4. 配列の宣言
というわけで、上記のように自動拡張は意外とややこしいです。そこで、配列には領域確保用の命令が用意されています。しかし、これらの命令を実行すると内容は全てクリアされるので注意が必要です。それぞれの型の初期化命令は次の4つです。使い方はリファレンスに詳しく載っています。
・dim命令 … 任意の型の配列変数を生成する。
・ddim命令 … 実数型の配列変数を生成する。
・sdim命令 … 文字列型の配列変数を生成する。
・ldim命令 … ラベル型の配列変数を生成する。
・dimtype命令 … 指定した型の配列変数を生成する。
5. 配列の長さの取得
HSPでは配列の要素数を取得することが出来ます。それが、length関数です。1次元の要素数を取得することが出来ます。他にも、length2関数やlength3関数、length4関数を使うことで各次元の要素数を取得することが出来ます。使い方の例を次に示します。
// 配列の要素数の取得
dim array, 5, 6, 7
// 要素数の表示
mes "" + length(array)
mes "" + length2(array)
mes "" + length3(array)
mes "" + length4(array)
最終更新:2016年04月05日 13:47