C#でラムダ式を書く方法1

C#でラムダ式を書く方法 #コラム_C#の歴史とここまでのまとめ

前回までPredicateまでをやりましたね。ここからはラムダ式の書き方をやって行きますが,ここまでやってきたことを一度,まとめてみましょう。

C#の歴史

C#の1.0,つまり初期バージョンですでにdelegateがあるので,メソッドの引数に「式」や「メソッド」を投げたい場合は,このdelegateを使うことで実現可能でした。ただ,匿名メソッドが存在しないため,必要なメソッドを書く必要がありました。Predicateも存在していないため,delegateを必要な定義で宣言しておく必要もありました。

C#2.0での匿名メソッドの出現により,毎回メソッドを作成しなくても,メソッド呼び出し時に,直接匿名メソッドを書くことができるようになり,使い捨てのメソッドであれば,名前も考える必要もなく引数として渡すことができるようになりました。Predicateを合わせて使うことで,引数が1つで戻り値がboolの場合は,delegateの宣言をしなくてもよくなりました。これはC#2.0で出現したジェネリックという型指定ができるようになった恩恵です。ここまでで,匿名メソッドとPredicateである程度,実装はやりやすくなりましたが,Predicateの定義に合わないものは,自前でdelegateを作成する必要があります。

C#3.0では,C#2.0の進化をさらに進め,より書きやすいようにするために出てきたのが,ラムダ式や,Action(アクション),Func(ファンク)というものです。これらの書き方は後述しますが,このC#3.0の時点で,C#の機能としては,ある程度安定したという印象です。

C#1.0では,最低限の機能が提供され,C#2.0ではジェネリックなどの進化で便利になり,C#3.0のラムダ式などで,C#はある程度の完成形になったと思います。その後のC#4.0でのリフレクション,Task,C#5.0でのasync,await,C#6.0以降もいろいろと追加されていますが,C#3.0が一つの完成形で,その補足として,進化を続けているという印象です。要するにC#3.0までの知識は必須で,ここまでの知識があれば,文法としては大体実装できるし,読めるという感じになり,強いていうなれば,async,awaitが非同期を書きやすくしたという意味で画期的な進化であり,それ以外の文法は,そこまで大した変化はないと思います。

オブジェクト指向の原則 単一責務の原則

C#を正しい3層構造で造れてますか?

非売品コースを受け取る

#00_はじめに
#01_単一責務の原則とは
#02_原則違反の例
#03_変更理由単位でクラスを分ける
#04_3層構造の例
#05_修正箇所を最小にできる
#06_修正する場所が明確になる
#07_共通化しましょうという話ではない
#08_少々悪いコードでも問題視しない理由
#09_探しやすいコード
#10_クラスは機能ごとに小さく作る
#11_小さなクラスがそれぞれに協調して目的を達成させる
#12_多数の部品群のなかから摘まんで作る
#13_クラスはどこまで小さくすればいいのか
#14_アンダーソン式単一責務の原則
#15_最小カプセルの検証_監視タイマークラス
#16_最小カプセルの検証_受注画面クラス
#17_最小カプセルの検証_ユーザークラス
#18_最小カプセルの検証_商品マスターデータアクセス
#19_登場人物に合わせたモデリングの四角と線
#20_四角と線を最小カプセル化する
#21_アンダーソン式手順
#22_パターンを見つけ出す
#23_プログラミングの自問
#24_さいごに

【参考図書】ピーコックアンダーソンが参考にした書籍一覧