【3/18〜】Amazon、VMwareが語る『クラウドの未来』 スラッシュドット    はてなブックマーク  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-
  TomcatやJBossなどAPサーバ環境に関する
情報を集約! “業務”用APサーバ大百科

New!
  一気に解説! 最新のクラスタストレージ
「RAIDを超えたストレージ基準」……など

New!
  クラウド的ユーザー体験の変化は脅威か?
仮想化技術を使いこなす運用管理術を紹介

New!

  上司や部下、部署内メンバーとの情報共有
を“ガラッ”と変えるコラボツールとは?

New!
  おばかアプリ選手権、第4弾開催中!!
ムダにカッコよくてくだらない作品求ム!

  社内ファイルサーバを“クラウド”に統合
VPN直結「クラウド型ストレージ」を紹介

  Twitterのアカウントはなぜ突破された?
メールによる新手の攻撃手法とその対策

  もう仮想化のお試しフェイズは終わりだ!
Hyper-V 2.0が基幹システムも仮想化

  美人!? まあまあ? 気になる いやし系!!
PV急増で「美人時計」がとった手段とは?

  クライアント企業から求められる人材
⇒IT技術と経営戦略を併せ持つ「戦略家」

  .NET編集長が実践する「技術情報検索術」
サンプル・コードを簡単に探す“技”は?

  業務効率と情報セキュリティ対策を両立!
手間なく確実に機密情報を守る方法とは?

  進化を続ける富士通ストレージETERNUS DX
製品開発者の自信を裏付けるものとは何か

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

  【CTC事例】約30の基幹システムを統合!
膨大なバッジジョブを制御した方法は?

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

  その数、なんと400台以上! グループ内
サーバの「統合管理」によるメリットは?