デリゲート (プログラミング) その他の言語のデリゲート

デリゲート (プログラミング)

出典: フリー百科事典『ウィキペディア(Wikipedia)』 (2024/02/16 13:57 UTC 版)

その他の言語のデリゲート

D言語には関数オブジェクトがあり、型としてfunctionとdelegateがある。無名関数を作る式として関数リテラルがあり、functionとdelegateのそれぞれに対応した構文がある。関数リテラルの省略構文としてラムダ式がある。functionとdelegateの違いは、作られたスコープの環境にアクセスできるかどうかで、アクセスする場合はデリゲートである必要がある。ラムダ式では内容に応じて、デリゲートである必要がある場合はデリゲートになる。

Javaはバージョン8にてラムダ式とともにメソッド参照の機能を導入した。ただしマルチキャストデリゲートに相当する機能はない。

C++/CLIは.NETマネージ言語であり、.NETのデリゲートをサポートする。メソッド宣言にdelegateキーワードを使用することで、System::MulticastDelegateを継承した、Invokeという名前のメソッドを持つクラスが自動定義される点などは、C#とほぼ同じである[12]。ただし、C++11で追加されたラムダ式を使ってデリゲートのインスタンスを生成することはできず、gcnewを使って明示的にデリゲートのインスタンスを生成する必要があるため、C# 2.0以降と比較してコードが煩雑になる[13]

C++/CX英語版は.NETマネージ言語ではなくネイティブ言語拡張だが、デリゲートをサポートする。イベントハンドラーの割り当てに利用される。ただし、C++/CXは参照カウントベースのガベージコレクションを採用していることから、強い参照による循環参照を防ぐため、イベントハンドラーの記述にはラムダ式よりも名前付き関数を利用することが推奨されている[14]

Objective-Cは言語機能としてデリゲートを持たないが、Objective-Cを用いたイベント駆動型ソフトウェアを開発する際の基本的なデザインパターンとして「委譲」が採用されている[15]。実態はJavaのインターフェイスを利用したイベントコールバックと同じく、XxxDelegateという名前を持つプロトコル(抽象型の一種)を採用(adopt)することでイベント処理のカスタマイズを実現する。Swiftのデリゲートも同様である。


注釈

  1. ^ DelphiもJ++もC#もアンダース・ヘルスバーグによる設計である。
  2. ^ Javaではまずinterface構文によるインターフェイスやclass構文によるスーパークラスの定義が必要であり、コード量が膨れ上がりやすい。サブクラス(インターフェイス実装クラス)の記述に関しては、無名クラスやラムダ式を利用することで簡略化できるが、コンパイラによって新たにサブクラス(インターフェイス実装クラス)が定義されることに変わりはない。

出典



「デリゲート (プログラミング)」の続きの解説一覧



英和和英テキスト翻訳>> Weblio翻訳
英語⇒日本語日本語⇒英語
  

辞書ショートカット

すべての辞書の索引

「デリゲート (プログラミング)」の関連用語

デリゲート (プログラミング)のお隣キーワード
検索ランキング

   

英語⇒日本語
日本語⇒英語
   



デリゲート (プログラミング)のページの著作権
Weblio 辞書 情報提供元は 参加元一覧 にて確認できます。

   
ウィキペディアウィキペディア
All text is available under the terms of the GNU Free Documentation License.
この記事は、ウィキペディアのデリゲート (プログラミング) (改訂履歴)の記事を複製、再配布したものにあたり、GNU Free Documentation Licenseというライセンスの下で提供されています。 Weblio辞書に掲載されているウィキペディアの記事も、全てGNU Free Documentation Licenseの元に提供されております。

©2024 GRAS Group, Inc.RSS