メソッドの引数チェック

今日改めて再認識したこと.
メソッドの引数チェックは必ずしたほうがよい.で,不正な引数に対してはArgumentException/ArgumentNullExceptionをthrowする習慣をつけたほうがよい.これをすることでデバッグ効率が格段に上がる……気がする.


ところで,こんなコードはどうだろう?

private A(int dispatcher)
{
  if (dispatcher<=0 || 4<dispatcher)
  {
    throw new ArgumentException();
  }

  switch (dispatcher)
  {
  case 1:
    // 1 のときの処理
    break;
  case 2:
    // 2 のときの処理
    break;
  case 3:
    // 3 のときの処理
    break;
  case 4:
    // 4 のときの処理
    break;
  default:
    // ここには到達しないはず!!
    // さて,なんて書こう??
    break;
  }
}

switch文の書き方としてdefault節は書くべきなんでしょうけど,入力チェックしてるので到達しないはず.

  1. ArgumentExceptionをthrowする
  2. Assertを書く
  3. 何も書かない(コメントだけ残しておく)

やっぱりAssertかな?でも,あまりそういうコードを見かけない気がします.たまたまでしょうか?