Effective C# 3rd 読書メモ 40 即時実行と遅延実行を区別する

宣言的コードは何をすべき(what)かを定義する。命令的コードはやり方(how)を説明する。どちらも必要だが、両者をごちゃ混ぜにすると予期せぬ振る舞いが発生する。 命令的コードは即時実行される。以下ではMethod1〜3 …

Effective C# 3rd 読書メモ 39 LINQ: FunctionとActionで例外が飛ばないようにする

一連の値に対して処理を行うコードを作成する際に、例外が投げられると、状態の復元に問題が発生する。 以下のようなEmployeeクラスがあるとする。ここでは、MonthlySalaryプロパティのsetterに事前条件のチ …

Effective C# 3rd 読書メモ 38 LINQではメソッドではなくラムダ式を使う

以下のように、似通った部分のあるコードを見かけると、共通化したくなるのはプログラマーの性だ。 public static void Main() { var allEmployees = FindAllEmployees …

Effective C# 3rd 読書メモ 37 クエリの遅延評価を使う

LINQによって定義したクエリは、通常は遅延評価(lazy evaluation)され、データは実際に必要になるまで取得されない。しかし、すぐに取得する(eager evaluation)こともできる。 実際に遅延評価の …

Effective C# 3rd 読書メモ 36 クエリ式がどのようにメソッド呼び出しにマップされるか理解する

LINQは2つの概念に基づいている: クエリ言語と、クエリ言語から一式のメソッドへの翻訳である。C#コンパイラはクエリ言語で書かれたクエリ式をメソッド呼び出しに変換する。 全てのクエリ式は、1つ以上のメソッド呼び出しにマ …