1. ホーム
  2. default

[解決済み】switch文は常にdefault句を含むべきですか?

2022-04-18 17:48:14

質問

私が初めてコードレビューを受けたとき(しばらく前)、すべてのswitch文にdefault句を含めるのがよい習慣であると言われました。 最近、このアドバイスを思い出したのですが、その正当な理由が思い出せません。 今となっては、かなり奇妙に聞こえます。

  1. デフォルトのステートメントを常に含めるべき賢明な理由はありますか?

  2. これは言語依存なのでしょうか? 当時使っていた言語を覚えていないのですが、もしかしたら、ある言語には適用され、他の言語には適用されないのでしょうか?

どのように解決するのですか?

スイッチのケースは ほとんど は必ず default の場合です。

を使用する理由 default

1.予期せぬ値を「キャッチ」するために

switch(type)
{
    case 1:
        //something
    case 2:
        //something else
    default:
        // unknown type! based on the language,
        // there should probably be some error-handling
        // here, maybe an exception
}

2. デフォルト」アクションを処理するために、ケースは特別な動作のためのものである。

メニュー駆動型のプログラムやbashのシェルスクリプトではよく見かけます。また、switch-caseの外で宣言された変数が初期化されておらず、それぞれのケースで異なる値に初期化されている場合にも見られます。この場合、変数にアクセスするコードがエラーを発生させないように、デフォルトでも初期化する必要があります。

3. コードを読んでいる人に、そのケースをカバーしていることをアピールするため。

variable = (variable == "value") ? 1 : 2;
switch(variable)
{
    case 1:
        // something
    case 2:
        // something else
    default:
        // will NOT execute because of the line preceding the switch.
}

これは単純化しすぎた例ですが、重要なのは、コードを読んだ人が、なぜ variable は1か2以外ではありえない。


を使用しない唯一のケースとして考えられるのは default スイッチが何かをチェックするときに、他の選択肢を無視できることが明らかな場合。

switch(keystroke)
{
    case 'w':
        // move up
    case 'a':
        // move left
    case 's':
        // move down
    case 'd':
        // move right
    // no default really required here
}