InfoQ

News

クロージャーでAPI設計および使用法を改善

作者 Jonathan Allen, 翻訳者 編集部 投稿日 2008年9月7日 午後9時57分

コミュニティ
.NET
トピック
プログラミング
タグ
Functional Programming,
Closures,
Visual Basic.NET,
C#

複雑な構文解析を実行するAPIによっては、イベントを通じて中間結果を公開するものがある。たとえば、XDocument.Validate拡張メソッドはイベントを使用し、プログラムに検証エラーがあることを通知する。

従来の.NETプログラミングでは、これらのイベントのキャッチは、各イベントで別々の機能を作成することを意味していた。イベントハンドラーに出入りする追加情報を渡す直接的な手段が存在しないため、これらの機能は通常throwawayクラス内で実装される。

 

Eric White氏はクロージャーを使用し、より良い方法をデモしている。クロージャーは、ラムダや匿名インライン機能の特殊なケースである。クロージャーを特 殊にさせているのは、それにローカルではない変数を参照することができるが、ラムダを含んでいる機能にはローカルである点である。このおかげで、Eric 氏はイベント処理ロジックを機能に対してローカルに維持する(リンク)ことができる。以下のラインは、作成中および検証機能に渡されているクロージャーを示してい る。

 

snippet.Validate(schemas, (o, e) => errors += e.Message + Environment.NewLine);

補足として、C#およびVBのクロージャーは、必要なメンバー変数を含む匿名クラスとして実装される。「閉鎖」変数は新たなクラスに移行されて、元の機能とそれが含むすべての匿名機能によって参照される。

原文はこちらです:http://www.infoq.com/news/2008/09/Closures-API

ブックマーク
digg+,
reddit+,
del.icio.us+,
dzone+,
Hatena

No comments

返信

特集コンテンツ一覧

Typemock: その過去・現在・未来

Eli Lopian氏率いるTypemock社の過去・現在・未来について、インタビュー形式にて記します。

企業とSaaSの仮想化がもたらすのは、迅速性(アップ)だけではない

この論文では、仮想化やクラウドサービスの複雑なメリットと実世界における応用を検討します。さらに重要なこととして、Contegixが複雑な問題の解決に仮想化を実装している方法や、仮想化を使うべきではないケースについて詳細を提供します。

RubyのFiberを非同期I/Oに使うNeverBlockとRevactor

Fiberはユーザに試練を課すことなくこの考えを実装する有益な並行性ツールとして、ライブラリが2つあります。まさにこのためのソリューションとしてあるのがNeverBlockライブラリです。私たちはNeverBlockプロジェクトのMohammad A. Ali氏とRevactorライブラリのTony Arcier氏に話を聞きました。

拡張性に関する悪習慣

システムの保守容易性や拡張性を確保するためのベスト・プラクティスに関する記事は数多くありますが、この記事では避けた方がいい、いくつかの悪習慣(ワースト・プラクティス)を強調します。

トップスポーツチームの監督に教わる秘訣

この論文では、氏が発見した原則を要約し、その原則をいかにしてソフトウェア開発に応用するかを説明します。

事例研究:Dutch Railwaysのプロジェクトにおける分散拠点でのスクラム・プロジェクト

この記事では、私達がどのようにして大規模(240人月、10万行強)でインドとオランダの開発者も参加したスクラム・プロジェクトを成功させたのかを示しています。

Agile2008チーム参加レポート - 帰国そして変化

Agileカンファレンスに「参加者としてだけでなく、発表者として参加しよう」を掲げたチームgoyattomは、サブミッションを提出し、7つのセッションが日本から選択されました。参加者はカンファレンスで各々の発表や、各セッションへの参加、諸外国のエンジニアとの出会い、ステージ上で DearXPを熱演などの様々な思い出を抱えて、無事日本に戻ってきました。

SilverlightとJavaのインターオペラビリティ

マイクロソフトのRobert Bellが、SilverlightとJavaを使用したインターオペラビリティのシナリオを紹介し、サンプルコードを例にとってアーキテクチャの手引きを提供します。