定義・宣言
変数や関数、定数などの定義について解説します。
変数
「型名 変数名」で変数を定義できます。 変数は宣言と同時に初期化することもできます。
// 宣言と同時に100で初期化
int value = 100;
// 初期値を指定せず、変数定義のみを行う
string emptyText;
定数の定義
基本型の変数定義の前に const を付与すると、その変数を初期化後に変更できなくなります。
クラス変数に const を付与することはできません。
// 変更できない定数の整数変数を定義
const int immutable = 999;
関数の定義
「戻り値 関数名(引数1, 引数2, ...)」という形で、関数を定義できます。戻り値を返さない関数を定義するには、void を指定します。
int Add(int x, int y) {
return x + y;
}
string CreateName(string firstName, string lastName) {
string name = firstName + " " + lastName;
return name;
}
void LogOutput(string log) {
hsSystemOutput(log);
}
classの定義
class の後にクラス名を、その後に { } で囲んだコードを記述することで、構造を持った型であるクラスを定義できます。
// クラスの定義
class MyAvatar {
string name;
int age;
public MyAvatar() {
// 初期化処理をここに書く
}
}
void main() {
// クラスの生成
MyAvatar avatar = new MyAvatar();
// ageは公開設定されていないので、アクセスするとコンパイルエラーになる
avatar.age = 999;
}
クラス定義の中に、クラス名と同じ名前の関数を public で定義すると、それはコンストラクタになります。クラスのインスタンスを生成する際には、new 演算子の後にクラスのコンストラクタを呼び出してください。
現時点で、HeliScriptは引数を持つコンストラクタに対応していません。
変数・関数のスコープ
変数は、定義された場所によって、以下のスコープを得ます。グローバルに定義したグローバル変数・グローバル関数は、それが定義されているファイル以外の、他のファイルからも呼び出したり、利用することができます。
- グローバルスコープ:ファイルのトップレベルで定義。他のファイルからもアクセスできる。クラスや関数の定義はグローバルにのみ書ける。
- ローカルスコープ:関数の中で定義。関数が終了すると消える。外部からアクセスできない。
- クラススコープ:クラスの中で定義。クラススコープの変数は、インスタンスごとに個別のデータを持つ。public を付与すると、クラスの外部からもアクセスできる。
// グローバル変数
int globalInt = 100;
// グローバル関数
void GlobalFunc() {
// .....
}
// グローバルなクラス定義
class MyClass {
// クラススコープ(非公開)
string secretID = "xxxx";
// クラススコープ(公開)
pubic const int value = 123;
}