コンテンツにスキップ

定義・宣言

変数や関数、定数などの定義について解説します。

変数

「型名 変数名」で変数を定義できます。 変数は宣言と同時に初期化することもできます。

// 宣言と同時に100で初期化
int value = 100;
// 初期値を指定せず、変数定義のみを行う
string emptyText;

定数の定義

基本型の変数定義の前に const を付与すると、その変数を初期化後に変更できなくなります。

constが付与できる型は、int, float, bool, string となります。

// 変更できない定数の整数変数を定義
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;
}