関数
関数は、一連のステートメントが含まれているコードの集まりです。必要な引数を指定してプログラムから関数を呼び出すと、関数内のステートメントが実行されます。
名前空間 | 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(); //出力:(何も出力されません)
拡張メソッド
拡張メソッドを使用すると、新規に型を作成することなく既存の型にメソッドを追加できます。拡張メソッドに使用する関数はグローバル関数である必要があり、現在の型の変数が代入される引数にthis
キーワードを使用します。
次の例は、現在の文字列の語数を数える(正確には、スペースで区切られた語の数を数える)WorldCount
メソッドをstring型に登録します。
function global WordCount(this string str) { return str.Split(“ ”).Length; } var text = “Hello Extension Methods”; print(text.WordCount());//出力例:3
登録したい引数の型指定修飾子をthis
キーワードの後に記述します。これを省略すると、variable
型に登録されます。複数のthis
キーワードを使用することはできません。拡張メソッドにはvirtual
属性およびoverride
属性を付与することもできます。標準の型メソッドのオーバーライド可否については変数を参照してください。
属性
AliceScriptではさまざまな機能や構造が関数で設計されているため、必要に応じて関数に特別な機能を持たせることが可能です。属性の一覧を以下に示します。
属性の名前 | 修飾子 | 概要 |
一般 | 指定不要 | 通常の関数です。引数などは自動的にチェックされ実行されます。 |
関数の区切り文字の空白をサポート | 指定不可 | 関数の呼び出し時に丸括弧の代わりに空白文字が使用できます。 |
単一の引数のみ関数の区切り文字の空白をサポート | 指定不可 | 関数の引数が一つのみの場合に関数の呼び出し時に丸括弧の代わりに空白文字が使用できます。 |
言語構造 | 指定不可 | 言語構造です。さまざまな形で使用できるため引数の自動チェックや最適化が実行されません。 |
オーバーライド可能 | virtual | オーバーライド可能な関数です。 |
オーバーライド | override | 既存の関数をオーバーライドします。この関数をオーバーライドすることもできます。 |
グローバル関数 | global | すべてのスコープで使用可能な関数です。 |