【2/17】今年は「濃厚」技術トーク!@ITメールセミナー スラッシュドット    はてなブックマーク  Yahoo!ブックマークに登録  印刷
 

連載:[完全版]究極のC#プログラミング

Chapter6 ラムダ式(前編)

川俣 晶
2009/10/19


 本記事は、(株)技術評論社が発行する書籍『[完全版]究極のC#プログラミング ― 新スタイルによる実践的コーディング』から、許可を得て転載しています。
 同書籍は、もともと本フォーラムにて連載していた『C# 2.0入門』、『C# 3.0入門』の記事を整理統合し、加筆、修正されたものです。

  手元でまとめて読みたい方は、ぜひ書店などにてお買い求めください。

 【注意】本記事は、書籍の内容を改変することなく、そのまま転載したものです。このため用字用語の統一ルールなどは@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ジャパン

Insider.NET フォーラム 新着記事

@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

RSSフィード

スキルアップ/キャリアアップ(JOB@IT)

- PR -
- PR -

お勧め求人情報

キャリアアップ 〜JOB@IT
@IT Special -PR-
  企業の仮想化に足りない“発想”とは?
仮想化運用管理のキモは意外なところに!

New!
  操作もマニュアルも分かりやすい!
ユーザー視点で開発されたPC管理ツール

New!
  仮想化すればコストは削減できるか?
仮想化に必要な「3つの視点」を解説する

  セキュリティを知り尽くす上野氏が登壇!
@ITメールソリューションLive! in Tokyo

  運用管理の課題を“2つの観点”から分析
ユーザー満足度の高い「仮想環境」とは?

  世界に通用するストレージの作り方とは?
製品に込めた思いを富士通の開発者に聞く

  OSSで手間も時間も、障害も減った――
「マピオンの事例」オープンソース活用法

  「ノートPCの持ち出し禁止」で大丈夫?
情報漏えいを防ぐ管理手法とインフラは?

  1日の処理を1秒に――MySQLの達人が語る
「コスト削減」できるチューニング

  ドキュメント作成を自動化して、SEの作業
効率を大幅アップ! Visio 2007の魅力

  急速に広がるHyper-Vでのサーバ仮想化
そのベストプラクティスをデルが解説

  @IT主催セミナーで語られた、「担当者に
求められるセキュリティ対策」をレポート

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