Code Complete, Code Craft, 危険なプログラムの処方箋といった書籍にも書いてあるベストプラクティスやアンチパターンをまとめて、「脳に優しいC#のメソッド設計」を定義するとすればこんな感じかも。
- 単一の責務を持つ(1つのメソッドであれもこれもしない)
- 責務が分かりやすいメソッド名を持つ
- メソッド全体の行数が短い (長くても40〜50行)
- 1ブロックあたりの行数が短い (長くても10〜20行)
- ネストが浅い (多くても3つ)
- 引数が少ない (できれば3つ以下。引数が多くなるならクラスや構造体に値を格納する)
- 引数の内容を変化させない (設計上やむを得ない場合はあるが、呼び出し側の"サプライズ"を招きやすいので可能な限り避ける)
- out専用の引数を持たない (結果は戻り値として返す)
- 処理の成功/失敗や演算結果は戻り値として返す (戻り値が複数個ある場合はクラスや構造体に値を格納する)
- 致命的なエラーやあってはならない問題が発生した場合は例外をスローする (戻り値に含めると呼び出し側に無視される可能性がある)
- 処理中にメンバ変数の値を変化させない (やむを得ない場合もあるが、メンバ変数は基本的にコンストラクタやPropertyによってのみ設定または変更されるようにクラスを設計する)
- 処理の途中で引数に別の値を代入しない
- ローカル変数の寿命を短くする (メソッドの行頭でまとめて変数宣言したり、一度使った変数を使いまわしたりしない)
自分のコード、他人のコードが上記の基準をどれだけ満たしているか見直してみましょう。
これらの基準を一つやぶるごとに、そのコードは「脳への暴力度」を増していきます・・・。