「デリゲート」の版間の差分

編集の要約なし
 
(同じ利用者による、間の1版が非表示)
1行目: 1行目:
[[Category:Alice(名前空間)]]
{{Alert|この記事のより新しい版が[https://docs.wsoft.ws/products/alice/api/delegate/ WSOFTDocs]にあります。AliceScriptWikiでは、この記事はもう更新されません。||04}}[[Category:Alice(名前空間)]]
[[Category:基本]]
[[Category:基本]]
デリゲートは、AliceScriptにおける”匿名関数”のメカニズムです。デリゲートは匿名関数として、その場ですぐに実行したり、変数に代入したり、関数に引数として渡すことができます。
デリゲートは、AliceScriptにおける”匿名関数”のメカニズムです。デリゲートは匿名関数として、その場ですぐに実行したり、変数に代入したり、関数に引数として渡すことができます。
14行目: 14行目:
*デリゲートは連結でき、たとえば、複数の関数を一度の呼び出しで実行することができます。
*デリゲートは連結でき、たとえば、複数の関数を一度の呼び出しで実行することができます。


この記事では<code>delegate</code>キーワードまたはラムダ式とそれによってサポートされる機能、<code>delegate</code>型に実装される機能を説明します。
この記事では<code>delegate</code>キーワードまたはラムダ式によって提供される機能、<code>delegate</code>型に実装される機能を説明します。


[[Category:基本]][[Category:Alice(名前空間)]]
[[Category:基本]][[Category:Alice(名前空間)]]
52行目: 52行目:


ラムダ式には、次の2つの形式があります。
ラムダ式には、次の2つの形式があります。
===式形式のラムダ===
===式形式のラムダ===
式形式のラムダは、次の形です。
式形式のラムダは、次の形です。
76行目: 75行目:
   };
   };
  powoutput(2);//出力例:4
  powoutput(2);//出力例:4
==関数からの暗黙的な変換==
==関数からの暗黙的な変換==
ほとんどのネイティブ関数とユーザー定義関数は、デリゲート型の変数へと暗黙的に変換できます。ユーザー定義関数を丸括弧なしで呼び出すと、それはその関数をデリゲート型に変換されたオペランドと認識されます。次に例を示します。
ほとんどのネイティブ関数とユーザー定義関数は、デリゲート型の変数へと暗黙的に変換できます。ユーザー定義関数を丸括弧なしで呼び出すと、それはその関数をデリゲート型に変換されたオペランドと認識されます。次に例を示します。
92行目: 90行目:


関数の属性について詳しく知るには、[[関数#属性|関数]]の記事を参照してください。
関数の属性について詳しく知るには、[[関数#属性|関数]]の記事を参照してください。
==デリゲートの組み合わせ==
==デリゲートの組み合わせ==
デリゲート型は、複数のデリゲートを一つに結合することができます。組み合わされたデリゲートの各ステートメントは、順番に実行され、<code>foreach</code>文を使用して一つずつに分解することも可能です。上記の例ですでに<code>SayHello</code>を定義しましたから、もう一つ、<code>SayBonjur</code>デリゲートを定義し、それらを結合して実行する例を示します。
デリゲート型は、複数のデリゲートを一つに結合することができます。組み合わされたデリゲートの各ステートメントは、順番に実行され、<code>foreach</code>文を使用して一つずつに分解することも可能です。上記の例ですでに<code>SayHello</code>を定義しましたから、もう一つ、<code>SayBonjur</code>デリゲートを定義し、それらを結合して実行する例を示します。
  var SayBonjur = delegate()
  var SayBonjur = delegate()
   {
   {
104行目: 100行目:
  //出力例:Hello,World!
  //出力例:Hello,World!
  //    :Bonjur
  //    :Bonjur
==イベント駆動型プログラム==
==イベント駆動型プログラム==
イベント駆動型プログラムは例えば「キーボードが押下された」とか、「マウスが移動した」などの受動的なイベントの発生によってコードが実行されるプログラムです。AliceScriptでは、デリゲート型とその組み合わせによって実現できます。ここでは簡単なサンプルとして、1秒おきにHello,Worldを表示し続け、それをeキーが押下されたときに停止するプログラムを作成します。このコードでは非同期的に1秒前にHello,Worldを表示し続け、同時に同期的にキーの押下を待機し続け、なんらかのキーが押下されたときに<code>OnkeyDown</code>にキーの情報を渡して呼び出します。
イベント駆動型プログラムは例えば「キーボードが押下された」とか、「マウスが移動した」などの受動的なイベントの発生によってコードが実行されるプログラムです。AliceScriptでは、デリゲート型とその組み合わせによって実現できます。ここでは簡単なサンプルとして、1秒おきにHello,Worldを表示し続け、それをeキーが押下されたときに停止するプログラムを作成します。このコードでは非同期的に1秒前にHello,Worldを表示し続け、同時に同期的にキーの押下を待機し続け、なんらかのキーが押下されたときに<code>OnkeyDown</code>にキーの情報を渡して呼び出します。