![]() |
連載:[完全版]究極のC#プログラミングChapter6 ラムダ式(前編)川俣 晶2009/10/19 |
|
|
| 本記事は、(株)技術評論社が発行する書籍『[完全版]究極のC#プログラミング ― 新スタイルによる実践的コーディング』から、許可を得て転載しています。 手元でまとめて読みたい方は、ぜひ書店などにてお買い求めください。 【注意】本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@ITのそれとは一致しません。あらかじめご了承ください。 |
6.1 おかずでもデザートでもなく“ご飯”
本書の構成を考えたとき、ラムダ式はC# 1.xから見れば飛躍が大きいので、後に回したほうがよいと考えた。しかし、実際にはこれまでに紹介したサンプルコードで、すでにしばしばラムダ式を使用している。
それが何を意味しているのか、食事にたとえてみよう。
典型的な食事は、ご飯、おかず、デザートなどで構成されている。ご飯はいつも同じようなものが出てくるが、おかずは毎回変わることが多い。そして、デザートは食事のメインではないが、特に目立つ花形である。
この中で、int型のような基本的なデータ型はもちろんご飯に当たる。どのようなプログラムでも変わりなく使われ、しかも使用量がいつも多いからだ。
一方、ASP.NET用のクラスなどは、おかずに当たるだろう。それは作るプログラム次第ではまったく使われないこともあるが、逆に非常に“おいしく”活用できることもあるからだ。また、WMIを扱うクラスなどは、デザートに当たるだろう。システムの管理処理にしか使われない、まさに特別に目立つ存在だからだ。
では、ラムダ式はご飯、おかず、デザートのどれに当たるだろうか?
「特殊なときに活用する機能」というイメージを持っているのであれば、おかずやデザートだと思うかもしれない。しかし、実際は“ご飯”に当たるのだ。C# 3.0に慣れれば慣れるほど、ラムダ式の使用量は増えていくように思う。しかも、ジャンルを問わず、どのようなプログラムを書いている場合にも増えていくのだ。
さて、実は驚くほどC# 3.0プログラミングではストレスを感じない。これまで使ってきたほかのプログラミング言語では大なり小なり感じてきた、さまざまなストレス要因がほとんど存在しないのである。それは、書きたいことと書かれたコードのギャップがきわめて少ないことを意味する。
たとえば、C# 3.0では、ソースコードのあちこちを移動しながら定義を書き込まなければならないような、回りくどいことはあまり経験しない。C++ならヘッダファイル(.h)とソースコード本体(.cpp)の定義を一致させるであるとか、ほかのOOP(オブジェクト指向プログラミング)言語ならインターフェースの定義と実装の定義を整合させるであるとか、そういった離れた場所の定義を整合させる作業が減ったような気がする。それらは、書きたいことと実際のコードの間に入り込んでくる不純物のような存在だったのかもしれない。
そして、ラムダ式は、そういった不純物を取り除く有力な手段となっているように感じられる。2つのメソッドが関連して動作するようなとき、どうしてもソースコードの2つの箇所を往復しながらコードを書く形になる。しかし、メソッドの中にラムダ式を書き込むことができれば、ソースコードの往復が減るのである。往復が減れば楽ができるので、ラムダ式使用へのストレス感もなくなる。ストレス感がなくなれば、もっと多用する。その結果として、ソースコードはより小さなメソッドに分割され、わかりやすさやメインテナンス性も上がるというわけである。
このようにして使われるラムダ式は、まさにおかずでもデザートでもなく“ご飯”に当たる存在としてコーディングを支えてくれる。
| INDEX | ||
| [完全版]究極のC#プログラミング | ||
| Chapter6 ラムダ式(前編) | ||
| 1.6.1 おかずでもデザートでもなく“ご飯” | ||
| 2.6.2 ラムダ式とは何か?/【C#olumn】定義済みデリゲートを活用しよう | ||
| 3.6.3 ラムダ式は上位スコープにアクセスできる | ||
| 4.6.4 キャプチャされる変数 | ||
| 5.6.5 注意を要するキャプチャの本質 | ||
| 6.6.6 デリゲートの共変性と反変性 | ||
| 7.6.7 デリゲートインスタンスの等価性 | ||
| 8.6.8 ラムダ式で継承を置き換えてみる | ||
| 9.6.9 C# 2.0と匿名メソッド/【Exercise】練習問題 | ||
| 「[完全版]究極のC#プログラミング」 |
ホワイトペーパー(TechTargetジャパン)
- LocalConnection APIと動的なスタイリング (2010/2/9)
Webページ上の複数のSilverlightアプリ間でメッセージ通信をする方法とは? コントロールの見た目を動的に設定する方法とは? - ASP.NET MVC 2:モデルの検証 (2010/2/8)
ASP.NET MVC 2で導入される入力検証機能を使った実装を紹介。シンプルな属性の追加によるエレガントな実装が可能となっている - ASP.NETによる3階層Webアプリ「ITブック」構築 (2010/2/5)
ちょっとした改造で、あなたのWebアプリは劇的に使いやすく、かっこよくなる。まずは元となるWebアプリを標準的手法で構築 - .NET TIPS - .NET開発のテクニックとヒント集 - (2010/2/4)
− カスタムMVCビューエンジンを利用するには?(活用編)
− フォーム全体へのドッキングでつまみを表示するには?
− リストボックスでTextBlockの文字列を折り返すには?
|
|
スキルアップ/キャリアアップ(JOB@IT)
スポンサーからのお知らせ
- - PR -
- - PR -
お勧め求人情報

**先週の人気講座ランキング**
〜CCNA編〜
| ◆ | 企業の仮想化に足りない“発想”とは? 仮想化運用管理のキモは意外なところに! New! |
| ◆ | 操作もマニュアルも分かりやすい! ユーザー視点で開発されたPC管理ツール New! |
| ◆ | 仮想化すればコストは削減できるか? 仮想化に必要な「3つの視点」を解説する |

| ◆ | セキュリティを知り尽くす上野氏が登壇! @ITメールソリューションLive! in Tokyo |
| ◆ | 運用管理の課題を“2つの観点”から分析 ユーザー満足度の高い「仮想環境」とは? |
| ◆ | 世界に通用するストレージの作り方とは? 製品に込めた思いを富士通の開発者に聞く |

| ◆ | OSSで手間も時間も、障害も減った―― 「マピオンの事例」オープンソース活用法 |
| ◆ | 「ノートPCの持ち出し禁止」で大丈夫? 情報漏えいを防ぐ管理手法とインフラは? |
| ◆ | 1日の処理を1秒に――MySQLの達人が語る 「コスト削減」できるチューニング |

| ◆ | ドキュメント作成を自動化して、SEの作業 効率を大幅アップ! Visio 2007の魅力 |
| ◆ | 急速に広がるHyper-Vでのサーバ仮想化 そのベストプラクティスをデルが解説 |
| ◆ | @IT主催セミナーで語られた、「担当者に 求められるセキュリティ対策」をレポート |

| ◆ | @IT「Windows 7」 特設サイトオープン! 最新情報・移行ノウハウを公開しています |








