2011年1月5日水曜日

C#で迷ったときのための備忘録

以下、『Effective C#』と『More Effective C#』から、
「A より Bを使いましょう」って感じで対比して書いてある項目を、抜書きしてみた。
Item NN が前者で C# 4.0、Item mNNが後者で C# 3.0。

More Effective C#More Effective C#


Item 01: Use Properties Instead of Accessible Data Members
パブリック・フィールドよりプロパティを使いましょうという当然な話。

Item 02: Prefer readonly to const
runtime 定数と compile-time 定数の違い。極限られた場合を除いて、普通は前者を選択するに越したことは無いとのこと。

Item 03: Prefer the is or as Operators to Casts
安全かつ効率的という事で強く推奨。

Item 04: Use Conditional Attributes Instead of #if
Conditional 属性はメソッド単位でしかつけられないが、むしろそのおかげで良好な構造化が保て、#if/#endif の濫用による可読性低下を防止できる。

Item 08: Prefer Query Syntax to Loops
for/while などの手続型構文よりも、宣言型の Query 構文を使うべし。Linqのメソッドも場合により可。

Item 12: Prefer Member Initializers to Assignment Statements
ローカル変数の宣言と初期化と同じで、保守性が高い。

Item 22: Prefer Defining and Implementing Interfaces to Inheritance
昔からあるオブジェクト指向プログラミングのプラクティス。

Item 30: Prefer Overrides to Event Handlers
ちょっと意外だけど、どちらも使える状況でさえあれば、よく考えてみると Override の方が簡単な上に自由度が高いという話。

Item m09: Prefer Generic Tuples to Output and Ref Parameters
『More ~』の方なので、C#4.0のTupleでなく C#3.x 環境で、Generics を用いた自作のクラスの話題。今の携わってる案件がC#3.5なので、使える。

Item m11: Use the Thread Pool Instead of Creating Threads
.Net が提供してくれてる Thread Pool の方が、使いやすくて効率がいいとの事。

Item m22: Prefer Defining Methods to Overloading Operators
まあ、明らかにメソッドよりも演算子オーバーロードの記述性が高いなんて場面は、滅多にないしね。

Item m38: Prefer Lambda Expressions to Methods
ラムダ式の方が、より小さい要素に分解したり、それらを組み合わせたりするのに便利。関数型言語に馴染みがあれば断然読みやすいし。

Item m44: Prefer Storing Expression<> to Func<>
式を保存したり複雑に組み合わせたりするときは、FuncよりExpressionの方が便利という話。

にしても、前回からずいぶんと間が空いてしまった・・・

0 件のコメント:

コメントを投稿