はじめに
前回までで、C#3.0の主な新機能については、一通りご説明してきました。
今回は、C#3.0の新機能を使って記述したサンプルコードをC#2.0でもご紹介してみます。
これによって、C#3.0の生産力を実際にご確認ください。
コード比較で理解するC#3.0の生産力
最初に、タイトルを除いてまったく同じ動作をしていることを示す、以下の二つの画面イメージを確認してみてください。
Form3、Form2という二つのフォームのそれぞれにlistBoxというリストボックスが配置されています。
どちらもリストボックスのアイテムをクリックすることで、その名前の番号をメッセージボックスに表示します。
行っていることは、次の通りです。
- 番号・名前・年齢プロパティを持つオブジェクトの作成
- 各オブジェクトをアイテムとしたコレクションオブジェクトの作成
- 番号・名前プロパティを持つオブジェクトのデータソースに作り変え
- 同時に、未成年情報だけを抽出して名前順に並べ替え
Form3、Form2という二つのフォームの画面イメージとサンプルコードです。
もちろん、どちらも同じ処理をするコードです。
どちらが生産性が高いのかについては、言うまでもないでしょう。
LINQの正体
前回、クエリー式の正体はシンタックスシュガーであることをご説明しました。
今回は前述のサンプルコードで使用しているLINQ to Objectsについて、もう少し掘り下げてご説明したいと思います。
まずは、次の実行結果の画面をご覧ください。
listBox1~3は同じ内容が表示されているだけの単なるフォームです。
しかし、3つのリストボックスに表示されているデータソースは異なる処理を経て生成されています。
最初に、基本となるデータソースを作ります。
そして、q1~3にデータソースを格納しています。
q1はクエリー式を使ってデータソースを生成しています。
q2は、q1をシンタックスシュガーを使わずに生成しています。
q3は、LINQによって行われている処理と同様の処理を自作したものを使用しています。
この結果、出来上がったデータソースは同じものになります。
最後に、ListBoxにBindingという拡張メソッドを作り、これを使ってlistBox1~3にq1~3のデータソースをセットしています。
既にご紹介したC#3.0の新機能を駆使することで、LINQで行われている処理と同様のものが自作できてしまうことがわかるでしょう。
同時に、C#3.0の新機能はLINQのためにあると一般的に言われている理由も納得できるかと思います。
型推論や拡張メソッド、ラムダ式がどのように使われているのかも、上記のコードを見れば既に理解できるはずです。
最後に
今回のC#の新機能は如何でしたか?
私は、今回のC#の新機能を初めて知った時に、一人の開発者として純粋に感動しました。
そして、実際に使ってみて、コーディングの楽しさに喜び、そして生産力の高さに驚きました。
この特集を読んでくださった皆さんにも、私と同じような感動を味わっていただけることを願いながら、本特集は終了とさせていただきたいと思います。
最後に、本連載を読んでくださった皆さん、連載の機会を与えてくださった技術評論社と担当の方々を始めとする多くの皆さんに心からお礼を申し上げます。
ありがとうございました。