この記事では、AliceScriptにおける文と、基本構文について説明します。


taiseiue | 2023-08-07

プログラムが実行する処理は、 として表されます。 一般的な文には、変数の宣言や値の代入、関数の呼び出し、ループ処理、条件分岐などがありますが、これがすべてではありません。 プログラム内で文が実行される順序は、フローと呼ばれます。フローは通常上から下へと進みますが、これから説明する構文によって、実行するたびに変わる可能性があります。

文は、セミコロン(;)で終わる一行のコードか、1つのブロックを形成する一連のコードで構成されます。文は波かっこ({})で囲み、入れ子にできます。 たとえば、次の例は、2つの文を入れ子にしています。

AliceScript
void Hoge(number num)
{
    if(num > 3)
    {
        print("Hoge!");
    }
}

文の種類

AliceScriptの文は、次のように分類できます。

  • 宣言文
  • 条件分岐文
  • 反復文
  • ジャンプ文
  • 例外処理文
  • lock
  • readonly
  • 空の文

宣言文

宣言文は、新しい変数または定数を定義します。宣言文では常に値の代入が必要です。

次の例では、値を指定して変数と定数を宣言しています。

AliceScript
// 変数宣言
var radius = 2;

// 定数宣言
const pi = 3.14159;

変数に定義や定義済みの変数に代入する方法については、変数を参照してください。

using宣言文を使用すると、その型の完全修飾名を使用せずに、現在のスクリプトで名前空間で定義された関数やクラスを使用できます。詳細については、usingを参照してください。 次の例では、現在のスクリプトにAlice.IOへの参照を追加しています。

AliceScript
using Alice.IO;

式は、関数を呼び出して値を計算したり、変数に値を格納したりします。 詳細については、を参照してください。

次の例では、演算、変数への値の代入と関数の呼び出しを行っています。

AliceScript
// 代入と演算
area = pi * (radius * radius);

// 関数の呼び出し
print(area);

条件分岐文

条件分岐文を使用すると、ある条件に応じて、コードの実行場所を分岐できます。詳細については、次の項目を参照してください。

次の例では、fizzBuzz関数に与えられた値が15の倍数であるときにFizzBuzzを表示し、3の倍数であるときはFizzを表示し、さらに5の倍数であるときにはBuzzを表示しそれ以外の場合はその数を表示します。

AliceScript
function fizzBuzz(number num)
{
    if(num % 15 == 0)
    {
        print("FizzBuzz");
    }
    else if(num % 3 == 0)
    {
        print("Fizz");
    }
    else if(num % 5 == 0)
    {
        print("Buzz");
    }
    else
    {
        print(num);
    }
}
fizzBuzz(3);//出力例:Fizz
fizzBuzz(5);//出力例:Buzz
fizzBuzz(14);//出力例:14
fizzBuzz(15);//出力例:FizzBuzz

反復文

反復文を使用すると、配列をループ処理したり、指定された条件が満たされるまで同じ文を繰り返し実行したりできます。詳細については、次の項目を参照してください。

次の例では、for文を使用して、0から2までをカウントしています。

AliceScript
var i = 0;
for(;i < 0; i++)
{
    write(i);
}
//出力例:012

ジャンプ文

ジャンプ文は、別の場所に制御を移動させます。詳細については、次の項目を参照してください。

次の例では、引数が3以上であった場合には、Hello,Worldを表示しません。

AliceScript
function test(number num)
{
    if(num > 3)
    {
        return;
    }
    print("Hello,World");
}

例外処理文

例外処理文を使用すると、実行時に発生するエラーや例外状態から適切に回復できます。詳細については、次の項目を参照してください。

  • throw
  • try

lock文

lock文を使用すると、一度に1つのスレッドしかコードにアクセスしないように制限できます。 詳細については、lock文を参照してください。

次の例では、10秒間の間、メインスレッドでitem2を代入することができません。

AliceScript
using Alice.Threading;

var item = 0;

task_run(delegate(){
    item = 1;
    delay(10000);
});
item = 2;
print(item);

readonly文

readonly文を使用すると、特定範囲内で変数への再代入を禁止できます。 詳細については、readonly文を参照してください。

次の例では、xを読み取り専用に設定しています。

AliceScript
number x = 0;

readonly(x)
{
    x++;//ここでエラー
}

空の文

空の文は、{...}または(...)のように関数名を使用せずにかっこで囲むか、block文を使用すると、空の文になります。この文はなにも実行しませんが、ブロックスコープを作成する目的などで使用できます。

次の例では、ブロックスコープを使って変数にアクセスできる場所を制限しています。

AliceScript
{
    var a = 0;
}
print(a);//これはエラー