連載:[完全版]究極の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#プログラミング」


Insider.NET フォーラム 新着記事
  • 第2回 簡潔なコーディングのために (2017/7/26)
     ラムダ式で記述できるメンバの増加、throw式、out変数、タプルなど、C# 7には以前よりもコードを簡潔に記述できるような機能が導入されている
  • 第1回 Visual Studio Codeデバッグの基礎知識 (2017/7/21)
     Node.jsプログラムをデバッグしながら、Visual Studio Codeに統合されているデバッグ機能の基本の「キ」をマスターしよう
  • 第1回 明瞭なコーディングのために (2017/7/19)
     C# 7で追加された新機能の中から、「数値リテラル構文の改善」と「ローカル関数」を紹介する。これらは分かりやすいコードを記述するのに使える
  • Presentation Translator (2017/7/18)
     Presentation TranslatorはPowerPoint用のアドイン。プレゼンテーション時の字幕の付加や、多言語での質疑応答、スライドの翻訳を行える
@ITメールマガジン 新着情報やスタッフのコラムがメールで届きます(無料)

注目のテーマ

Insider.NET 記事ランキング

本日 月間