【Vket Cloud】動画つき！ゼロから始めるHeliScript超入門⑥ - HeliScriptで制御構文を使う(if、switch)

# はじめに

Vket Cloudでは、「HeliScript」という独自のスクリプトを使用してコーディングを行うことで、ワールド内に高度なギミックを導入することが出来ます。

本記事では、HeliScriptで使用可能な制御構文のうち、条件分岐に使用するif、switchについて紹介します。

# 動画
今回は動画が2本あります。

<iframe width="560" height="420" src="https://www.youtube.com/embed/u1b0mUehjwY?si=NWRwLTeBLFzYgOKG" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

<iframe width="560" height="420" src="https://www.youtube.com/embed/ej14R7UFcY4?si=0IIi3ZHCswvRKBAc" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen></iframe>

# 制御構文って？
「特定の条件を満たした時だけ実行する」や「○回繰り返し実行する」といった、条件や回数に応じて実行する処理を変えるために使う構文です。

これを使いこなすことで、複雑な処理を実装出来たり、処理の実装を効率的に行うことが出来たりします。
HeliScriptを使いこなすうえで必要不可欠なので、しっかりマスターしましょう。

:::note
制御構文を記載するうえで使用する`{}`(中カッコ)はShiftキーを押しながら`[`キー、`]`キーを入力することでそれぞれ入力が可能です。
一般的なキーボードの場合、Enterキーの左隣にあります。
:::

# 制御構文の種類
HeliScriptで使える制御構文にはif、switch、for、whileの4種類があります。
ifとswitchは条件により実行する処理を変更する条件分岐の構文、forとwhileは同じ処理を繰り返し行う繰り返し構文になります。

## if文
if文は、カッコ`()`内で指定した条件を満たしている時、中カッコ`{}`内の処理を実行する、という制御構文です。
```
    int a = 0; // int型変数「a」に0を格納
    if(a == 0){ // 変数aの中身が0の時、中カッコ内を実行
        hsSystemWriteLine("aの中身は0です"); // aの中身が0であることをコンソールに表示
    }
```
上の例では、`if(a == 0)`でaの中身が0かどうかを判別していました。
aはその直前で0を格納しているため、if文の中を通り、「aの中身は0です」といった文章が表示されます。

### else
if文の条件を満たさなかった時、elseの中カッコ`{}`内の処理を実行します。
```
    int a = 1; // int型変数「a」に1を格納
    if(a == 0){ // 変数aの中身が0の時、中カッコ内を実行
        hsSystemWriteLine("aの中身は0です"); // aの中身が0であることをコンソールに表示
    }
    else{
        hsSystemWriteLine("aの中身は0ではありません"); // aの中身が0でないことをコンソールに表示
    }
```
例えば上記の場合、変数aに1が入っており、if(a == 0)の条件を満たしません。
そのため、elseの中カッコの中の処理が実行され、「aの中身は0ではありません」といった文章が出力されます。

### else if
if文の条件を満たさなかった時、カッコ`()`内で指定した条件を満たしている時、中カッコ`{}`内の処理を実行します。
```
    int a = 2;
    if(a == 0){
        hsSystemWriteLine("aの中身は0です"); // aの中身が0であることをコンソールに表示
    }
    else if(a == 2){
        hsSystemWriteLine("aの中身は2です"); // aの中身が2であることをコンソールに表示
    }
    else{
        hsSystemWriteLine("aの中身は0でも2でもありません"); // aの中身が0でも2でもないことをコンソールに表示
    }
```
上記の例の場合、変数aには2が格納されています。
最初のif文の条件式は、aの中身が0の場合こちらを通るため、今回は通らず、else ifの条件式のチェックを行います。
else ifの条件式ではaの中身が2の場合こちらを通るとなっているため、条件を満たし、「aの中身は2です」を出力します。
条件を満たしたため、この先のelse文の中身は実行されません。

もし、aに格納された値が1や3であれば、「aの中身は0でも2でもありません」が出力されていました。

## switch文

ifやelse ifを使用することで、複数の分岐のうち、どれか一つを実行するという処理構造を作ることが出来ますが、分岐の数が増えるとプログラムが長くなってしまい、後から読み返した際にどういった処理をするのか分かりづらくなってしまいます。

switch文を使うことで、複数の分岐のうち、どれか一つを実行する処理構造を簡単に実装することが出来ます。

switch文では、まず対象となる変数を指定し、`case`で指定した値と一致する処理を実行する、といったものになります。

また、`default`を記載することで、どのcaseにも該当しなかった際に、そちらの中身が実行されます。

```
    int a;
    a = 3;
    switch(a)
    {
        case 1: // aの中身が1のとき、この中を通る
            hsSystemWriteLine("aの中身は1です");
            break;
        case 2: // aの中身が2のとき、この中を通る
            hsSystemWriteLine("aの中身は2です");
        case 3: // aの中身が3のとき、この中を通る
            hsSystemWriteLine("aの中身は3です");
            break;
        default: // aの中身が1でも2でも3でもないとき、この中を通る
            hsSystemWriteLine("aの中身は1でも2でも3でもありません");
            break;
    }
```

上記がswitch文の記載例になります。
aの中身が3なので、「aの中身は3です」を表示し、処理が終了します。
#### switch文を使う上での注意点
各caseの終わりにbreakを入れないと、その下の処理も実行されてしまいます。
上記の例の場合、aの中身が2だと「aの中身は2です」と「aの中身は3です」を表示してしまいます。

場合によってはこの性質を活かした制御を作ることも出来ます。

:::note
switch文で使用する`:`(コロン)は、一般的なキーボードでは`;`(セミコロン)キーの右隣にあります。
:::

## 条件式について

条件式にはいくつかの種類があります。

### 等価　`a == b`
aとbが同じとき、trueとなります。
aとbが異なるとき、falseとなります。

```
// true となる例
a = 15; b = 15;

// false となる例
a = "Vketchan"; b = "vketChan";
```

### 以下 `a <= b`
aがbと同じ、あるいは小さいとき、trueとなります。
aがbより大きいとき、falseとなります。

```
// true となる例
a = 4; b = 4.0;
a = 8; b = 9;

// false となる例
a = 1.2; b = 1;
```

### 以上　`a >= b`

aがbと同じ、あるいは大きいとき、trueとなります。
aがbより小さいとき、falseとなります。

```
// true となる例
a = 4; b = 4.0;
a = 9; b = 8;

// false となる例
a = 1; b = 1.2;
```

### 小なり `a < b`
aがbより小さいとき、trueとなります。
aがbとおなじ、あるいは大きいとき、falseとなります。

```
// true となる例
a = 8; b = 9;

// false となる例
a = 4; b = 4.0;
a = 1.2; b = 1;
```

### 大なり　`a > b`

aがbより大きいとき、trueとなります。
aがbと同じ、あるいは小さいとき、falseとなります。

```
// true となる例
a = 9; b = 8;

// false となる例
a = 4; b = 4.0;
a = 1; b = 1.2;
```

### 不等価　`a != b`
aとbが異なるとき、trueとなります。
aとbが同じとき、falseとなります。

```
// true となる例
a = 15; b = 13;

// false となる例
a = "VketChan"; b = "VketChan";
```

### 条件付きAND `a && b`
aとb、2つの条件をどちらも満たしているとき、trueとなります。
aとbのどちらか、あるいはどちらも満たしていないとき、falseとなります。

日本語ではAかつB、といった表現をします。

```
// trueとなる例
a = 15; b = 13; c = VketChan; d = VketChan;
if(a >= b && c == d) // この条件式はtrueとなり、カッコの中を通る
{

}

// falseとなる例
a = 15; b = 13; c = VketChan; d = VketChan;
if(a < b && c == d) // この条件式はfalseとなり、カッコの中を通らない
{

}
```


### 条件付きOR `a || b`

aとb、2つの条件のどちらか、あるいはどちらも満たしているとき、trueとなります。
aとbのどちらも満たしていないとき、falseとなります。

日本語ではAまたはB、といった表現をします。

```
// trueとなる例
a = 15; b = 16; c = VketChan; d = VketChan;
if(a >= b || c == d) // この条件式はtrueとなり、カッコの中を通る
{

}

// falseとなる例
a = 15; b = 13; c = VketChan; d = VketCloud;
if(a < b || c == d) // この条件式はfalseとなり、カッコの中を通らない
{

}
```

:::note
**条件式で使用する記号の入力について**

`<`はShiftキーを押しながら`M`キーの右隣にある`,`キー、
`>`はShiftキーを押しながら`,`キーの右隣にある`.`キー、
`&`はShiftキーを押しながら`6`キー、
`|`はShiftキーを押しながら右上のBackSpaceの左隣にある`￥`キーを押すと入力できます。
:::

次 : [⑦ HeliScriptで制御構文を使う(for、while)](<https://qiita.com/shirapy/private/67f5aa258893694d64bb>)
前 : [⑤ HeliScriptで変数を使う 後編](<https://qiita.com/shirapy/items/ea06576b59ab00e5fb32>)