「
関数
」を編集中
ナビゲーションに移動
検索に移動
警告:
ログインしていません。編集を行うと、あなたの IP アドレスが公開されます。
ログイン
または
アカウントを作成
すれば、あなたの編集はその利用者名とともに表示されるほか、その他の利点もあります。
スパム攻撃防止用のチェックです。 決して、ここには、値の入力は
しない
でください!
{{Alert|この記事のより新しい版が[https://docs.wsoft.ws/products/alice/api/alice/function/ WSOFTDocs]にあります。AliceScriptWikiでは、この記事はもう更新されません。||04}} 関数は、一連のステートメントが含まれているコードの集まりです。必要な引数を指定してプログラムから関数を呼び出すと、関数内のステートメントが実行されます。 [[Category:基本]][[Category:Alice(名前空間)]] {| class="wikitable" |+function |- |名前空間 |Alice |- |アセンブリ |ローカル |- |サポート |AliceScript1 |- |属性 |言語構造 |} =基本= 関数は、クラスやスコープ内で修飾子(<code>override</code>や<code>virtual</code>など)、関数の名前および引数を指定して宣言されます。 引数はかっこで囲み、各引数をコンマで区切ります。括弧内を空にすると、関数で引数が不要なことを意味します。 定義された関数は、関数の定義された後で使用できるようになります。 次の例には<code>SayHello</code>関数が定義されています。これをユーザー定義関数といいます。<code>SayHello</code>が呼び出されたとき、標準出力にHello,World!を書き込みます。 function SayHello() { print("Hello,World!"); } SayHello(); =戻り値= 関数は、呼び出し元に<code>return</code>キーワードを使用して値を返すことができます。関数の戻り値は呼び出し元でそのまま値として使用できます。次に例を示します。 function ReturnHello() { return "Hello,World!"; } print(ReturnHello()); //出力:Hello,World! また、<code>return</code>キーワードは、関数の実行を中止します。任意の場面で関数の実行を中止したい場合、 値を持たない<code>return</code>キーワードを使用することができます。次に例を示します。 function ShowHello() { print("Hello"); return; print("Hello,(again)");//この行は、returnキーワードよりも後にあるため実行されません } //出力:Hello =引数= 関数を定義する際には、必要な引数の名前を指定します。呼び出し元のコードから関数を呼び出すときに引数に具体的な値を指定します。次に例を示します。 function AddNumber(numA,numB) { rerturn numA + numB; } AddNumber(1,2);//戻り値:3 また、引数に<code>number</code>や<code>string</code>などの型指定修飾子を使用すると、その型の値のみを引数として受け入れるようになり、予期しない型を使用した呼び出しを防ぐことができます。次に例を示します。 function Add(number a,number b) { return a+b; } Add(1,2);//戻り値:3 Add("1","2");//例外発生 さらに、引数に<code>params</code>キーワードを使用すると、可変長個の引数を受け取る引数を指定できます。<code>params</code>の型は常にARRAYとなります。 一つの関数内では、<code>params</code>キーワードより後に引数を指定することができません。次に例を示します。 function PrintAllArgs(params args) { foreach(arg in args) { print(arg); } } PrintAllArgs("Hello","World"); //出力:Hello World PrintAllArgs(); //出力:(何も出力されません) =スコープ= 関数は、変数と同じように、そのスコープ内で一意な名前である必要があります。スコープの範囲内では、基本的に同じ名前の関数を宣言することはできませんし、反対にスコープの外に出ると、その範囲内で定義した関数は使用できません。しかし、すでに定義された関数がオーバーライド可能属性を持っている場合は、<code>override</code>修飾子を使ってその関数を上書きできます。次に例を示します。 function virtual SayHello() { print(“Hello,World”); } SayHello();//出力例:Hello,World function override SayHello() { print(“Hello,Bonjur”); } SayHello();//出力例:Hello,Bonjur その関数を、現在のスコープの範囲外で使用できるようにするには、その関数に<code>global</code>修飾子を使用することそれをグローバル関数として宣言する必要があります。次に例を示します。 function RegisterGlobalFunction() { function global SayHello() { print(“Hello,World”); } } RegisterGlobalFunction(); SayHello();//出力例:Hello,World =拡張メソッド= 拡張メソッドを使用すると、新規に型を作成することなく既存の型にメソッドを追加できます。拡張メソッドに使用する関数はグローバル関数である必要があり、現在の型の変数が代入される引数に<code>this</code>キーワードを使用します。 次の例は、現在の文字列の語数を数える(正確には、スペースで区切られた語の数を数える)<code>WorldCount</code>メソッドをstring型に登録します。 function global WordCount(this string str) { return str.Split(“ ”).Length; } var text = “Hello Extension Methods”; print(text.WordCount());//出力例:3 登録したい引数の型指定修飾子を<code>this</code>キーワードの後に記述します。これを省略すると、<code>variable</code>型に登録されます。複数の<code>this</code>キーワードを使用することはできません。拡張メソッドには<code>virtual</code>属性および<code>override</code>属性を付与することもできます。標準の型メソッドのオーバーライド可否については[[変数]]を参照してください。 =デリゲートへの暗黙的な変換= ほとんどのネイティブ関数とユーザー定義関数は、[[デリゲート]]型の変数へと暗黙的に変換できます。ユーザー定義関数を丸括弧なしで呼び出すと、それはその関数をデリゲート型に変換されたオペランドと認識されます。次に例を示します。 function SayHello() { print(“Hello,World”); } var hello=SayHello;//helloは、DELEGATE型を表します hello();//出力:Hello,World ただし、以下の属性を持っている関数を暗黙的に変換することはできません。 *言語構造 *関数の区切り文字の空白をサポート *単一の引数のみ関数の区切り文字の空白をサポート また、FunctionBase型を継承しない関数も、この機能をサポートしません。 =属性= AliceScriptではさまざまな機能や構造が関数で設計されているため、必要に応じて関数に特別な機能を持たせることが可能です。属性の一覧を以下に示します。 {| class="wikitable" |+関数の属性 |- |属性の名前 |修飾子 |概要 |- |一般 |指定不要 |通常の関数です。引数などは自動的にチェックされ実行されます。 |- |関数の区切り文字の空白をサポート |指定不可 |関数の呼び出し時に丸括弧の代わりに空白文字が使用できます。 |- |単一の引数のみ関数の区切り文字の空白をサポート |指定不可 |関数の引数が一つのみの場合に関数の呼び出し時に丸括弧の代わりに空白文字が使用できます。 |- |言語構造 |指定不可 |言語構造です。さまざまな形で使用できるため引数の自動チェックや最適化が実行されません。 |- |オーバーライド可能 |virtual |オーバーライド可能な関数です。 |- |オーバーライド |override |既存の関数をオーバーライドします。この関数をオーバーライドすることもできます。 |- |グローバル関数 |global |すべてのスコープで使用可能な関数です。 |}
編集内容の要約:
AliceScript Wikiへの投稿はすべて、他の投稿者によって編集、変更、除去される場合があります。 自分が書いたものが他の人に容赦なく編集されるのを望まない場合は、ここに投稿しないでください。
また、投稿するのは、自分で書いたものか、パブリック ドメインまたはそれに類するフリーな資料からの複製であることを約束してください(詳細は
AliceScript Wiki:著作権
を参照)。
著作権保護されている作品は、許諾なしに投稿しないでください!
キャンセル
編集ヘルプ
(新しいウィンドウで開きます)
このページで使用されているテンプレート:
テンプレート:Alert
(
編集
)
テンプレート:Func-getcolor
(
編集
)
テンプレート:Func-getsafe
(
編集
)
ナビゲーション メニュー
個人用ツール
ログインしていません
トーク
投稿記録
アカウント作成
ログイン
名前空間
ページ
議論
日本語
表示
閲覧
編集
履歴表示
その他
検索
案内
メインページ
ツアー
ダウンロード
規約
おまかせ表示
ツール
リンク元
関連ページの更新状況
特別ページ
ページ情報