関数
関数は、一連のステートメントが含まれているコードの集まりです。必要な引数を指定してプログラムから関数を呼び出すと、関数内のステートメントが実行されます。
| 名前空間 | Alice |
| アセンブリ | ローカル |
| サポート | AliceScript1 |
| 属性 | 言語構造 |
基本
関数は、クラスや名前空間内外で修飾子(overrideやvirtualなど)、関数の名前および引数を指定して宣言されます。
引数はかっこで囲み、各引数をコンマで区切ります。括弧内を空にすると、関数で引数が不要なことを意味します。
定義された関数は、関数の定義された後で使用できるようになります。
次の例にはSayHello関数が定義されています。SayHelloが呼び出されたとき、標準出力にHello,World!を書き込みます。
function SayHello()
{
print("Hello,World!");
}
SayHello();
戻り値
関数は、呼び出し元にreturnキーワードを使用して値を返すことができます。関数の戻り値は呼び出し元でそのまま値として使用できます。次に例を示します。
function ReturnHello()
{
return "Hello,World!";
}
print(ReturnHello());
//出力:Hello,World!
また、returnキーワードは、関数の実行を中止します。任意の場面で関数の実行を中止したい場合、
値を持たないreturnキーワードを使用することができます。次に例を示します。
function ShowHello()
{
print("Hello");
return;
print("Hello,(again)");//この行は、returnキーワードよりも後にあるため実行されません
}
//出力:Hello
引数
関数を定義する際には、必要な引数の名前を指定します。呼び出し元のコードから関数を呼び出すときに引数に具体的な値を指定します。次に例を示します。
function AddNumber(numA,numB)
{
rerturn numA + numB;
}
AddNumber(1,2);//戻り値:3
また、引数にnumberやstringなどの型指定修飾子を使用すると、その型の値のみを引数として受け入れるようになり、予期しない型を使用した呼び出しを防ぐことができます。次に例を示します。
function Add(number a,number b)
{
return a+b;
}
Add(1,2);//戻り値:3
Add("1","2");//例外発生
さらに、引数にparamsキーワードを使用すると、可変長個の引数を受け取る引数を指定できます。paramsの型は常にARRAYとなります。
一つの関数内では、paramsキーワードより後に引数を指定することができません。次に例を示します。
function PrintAllArgs(params args)
{
foreach(arg in args)
{
print(arg);
}
}
PrintAllArgs("Hello","World");
//出力:Hello
World
PrintAllArgs();
//出力:(何も出力されません)
属性
AliceScriptではさまざまな機能や構造が関数で設計されているため、必要に応じて関数に特別な機能を持たせることが可能です。属性の一覧を以下に示します。
| 属性の名前 | 修飾子 | 概要 |
| 一般 | 指定不要 | 通常の関数です。引数などは自動的にチェックされ実行されます。 |
| 関数の区切り文字の空白をサポート | 指定不可 | 関数の呼び出し時に丸括弧の代わりに空白文字が使用できます。 |
| 単一の引数のみ関数の区切り文字の空白をサポート | 指定不可 | 関数の引数が一つのみの場合に関数の呼び出し時に丸括弧の代わりに空白文字が使用できます。 |
| 言語構造 | 指定不可 | 言語構造です。さまざまな形で使用できるため引数の自動チェックや最適化が実行されません。 |
| オーバーライド可能 | virtualまたはoverride | オーバーライド可能な関数です。 |
| オーバーライド | override | 既存の関数をオーバーライドします |
| グローバル関数 | global | すべてのスコープで使用可能な関数 |