目次
オープニング
シーン1 言語仕様の問題
- 1.1 varの忌避
- 1.2 ifとswitchの誤用
- 1.3 forとforeachの誤用
- 1.4 whileで条件判断
- 1.5 doのほうがよいのに使わない問題
- 1.6 ループする必要のないループ
- 1.7 冗長な非同期ループ
- 1.8 解放されない参照
- 1.9 解放したつもりのメモリ
- 1.10 過剰に表現力がありすぎる型の利用
- 1.11 過剰に表現力が不足しすぎる型の利用
- 1.12 意味がない構造体の利用
- 1.13 ポインタの利用
- 1.14 無駄なキャストの多用
- 1.15 全部1クラス症候群
- 1.16 全部public症候群
- 1.17 全部static症候群
- 1.18 using文を使わない症候群
- 1.19 Mixed Language Programmingを知らない
- 1.20 constが使えるケースで普通の変数を使う
- 1.21 readonlyが使えるケースで普通の変数を使う
- 1.22 列挙型を使わないで定数を定義する
- 1.23 無駄に深いクラス階層
- 1.24 別の名前空間での同じ名前の多用
- 1.25 多すぎる引数
- 1.26 付けすぎるvirtual
- 1.27 ソースコードにパスワードを直書きする
- 1.28 例外を処理しないのにcatchする
- 1.29 catchして何もせずそのままthrowする
- 1.30 何の役割もない継承を繰り返す
- 1.31 委譲すべきケースで継承する
- 1.32 短すぎる名前の問題
- 1.33 長すぎる名前の問題
- 1.34 記号的な名前の問題
シーン2 ライブラリの問題
- 2.1 旧世代のコレクションを使う
- 2.2 コレクションを返す
- 2.3 WinFormsへの固執
- 2.4 Windows APIの直接呼び出し
- 2.5 古いXML DOM
- 2.6 古いXSLT
- 2.7 独自形式バイナリーへのシリアライズ
- 2.8 過剰な例外への依存
- 2.9 XElementがNullable
にキャスト可能と知らない - 2.10 MVCでViewにロジックを書く
- 2.11 ループとロジックが入り交じっている
- 2.12 それはリソースの無駄遣い
- 2.13 Javaよ安らかに眠れ
シーン3 環境の問題
- 3.1 GACに入れたがる症候群
- 3.2 Ngenに依存する症候群
- 3.3 新しすぎるランタイムのバージョン
- 3.4 古すぎるランタイムのバージョン
シーン4 アルゴリズムの問題
- 4.1 再帰に頼りすぎ
- 4.2 不変ではないクラス
- 4.3 散在する情報
- 4.4 多すぎるクエリ
- 4.5 冗長な判定
- 4.6 ユニークさが確保されているのに判定する
- 4.7 ユニークさが確保されていないのに判定しない
- 4.8 永遠に実行されないコード
- 4.9 異常ケースで致命的な処理を止めないコード
- 4.10 無効値を多発するデータ設計
シーン5 Visual Studioの問題
- 5.1 便利な拡張機能を入れない問題
- 5.2 便利な拡張機能を入れすぎる問題
- 5.3 !キーを使わない問題
- 5.4 !キーに依存しすぎる問題
- 5.5 NuGetを使わない問題
- 5.6 NuGetが使えない問題
- 5.7 適切なバージョンのテンプレートが選べない問題
- 5.8 とりあえずコンソールアプリという問題