【Java入門】switch文のdefaultの使い方

こんにちは!フリーエンジニアのせきです。

Javaのswitch文の中で、defaultというキーワードを使うことができます。

この記事では、

・switch文のdefaultとは、どういった意味をもっているのか知りたい
・defaultをどういう時に使うのか知りたい

という基本的な内容から、

・switch文の式の値が、どの条件値にも当てはまらない時の処理を書きたい
・defaultで気を付けるべきフォールスルーとは何か

などの応用的な内容に関しても解説していきます。

今回はdefaultの意味と使い方をわかりやすく解説します!

なお、Javaの記事については、こちらにまとめています。

目次

defaultとは

Javaで分岐処理を書く文法といえばif文です。
しかし、ある変数の値によって分岐処理を行う場合は、switch文を使うこともできます。

例えば、if文で書いた以下のコード。

if (value == 0) {
    System.out.println("valueは0です");
} else if (value == 1) {
    System.out.println("valueは1です");
} else if (value == 2) {
    System.out.println("valueは2です");
}

switch文だと以下のように書くことができます。

switch (value) {
case 0:
    System.out.println("valueは0です");
    break;
case 1:
    System.out.println("valueは1です");
    break;
case 2:
    System.out.println("valueは2です");
    break;
}

switch文で書いた方が、コードが見やすくありませんか?

では、以下のif文はどうでしょう?

if (value == 0) {
    System.out.println("valueは0です");
} else if (value == 1) {
    System.out.println("valueは1です");
} else if (value == 2) {
    System.out.println("valueは2です");
} else {
    System.out.println("valueは0でも1でも2でもありません");
}

valueの値が0でも1でも2でもない場合の処理を、else文を使って書いています。
この、値がどの条件値にも当てはまらない場合の処理を、switch文で書きたい時に使うのがdefaultです。

使ってみる

上のif文は、switch文で以下のように書くことができます。

switch (value) {
case 0:
    System.out.println("valueは0です");
    break;
case 1:
    System.out.println("valueは1です");
    break;
case 2:
    System.out.println("valueは2です");
    break;
default:
    System.out.println("valueは0でも1でも2でもありません");
    break;
}

valueの値が0でも1でも2でもない場合、「default:」の位置に処理が移ります。
そして、その後に書かれた処理が実行されていきます。

valueが3の場合の実行結果

valueは0でも1でも2でもありません

どの条件値にも当てはまらない場合の処理がなければ、default文は書かなくても構いません。

実践での注意点

switch文を使うときには、フォールスルーに気を付けなければいけません。
フォールスルーとは、case文のbreakを省略した書き方です。

breakは、次のcase文の処理を実行したくない場合に記述します。
そのため、次のcase文の処理を続けて実行したい場合には、breakを省略します。

以下のコードは、どのような動きをするでしょうか?

switch (value) {
case 0:
case 1:
    System.out.println("valueは0または1です");
    break;
case 2:
    System.out.println("valueは2です");
    break;
default:
    System.out.println("valueは0でも1でも2でもありません");
    break;
}

valueが0の場合の実行結果

valueは0または1です

valueが1の場合の実行結果

valueは0または1です

valueが2の場合の実行結果

valueは2です

valueが3の場合の実行結果

valueは0でも1でも2でもありません

この例のフォールスルーは、コードも見やすく問題ありませんが、
次のフォールスルーはどうでしょうか?

switch (value) {
case 0:
    System.out.println("valueは0です");
case 1:
    System.out.println("valueは1です");
case 2:
    System.out.println("valueは2です");
    break;
default:
    System.out.println("valueは0でも1でも2でもありません");
    break;
}

valueが0の場合の実行結果

valueは0です
valueは1です
valueは2です

valueが1の場合の実行結果

valueは1です
valueは2です

valueが2の場合の実行結果

valueは2です

valueが3の場合の実行結果

valueは0でも1でも2でもありません

このように書くと処理が途端に複雑になり、コードを見たときにbreakを意図的に書いていないのか、書き忘れてしまったのか、区別がつきづらくバグの原因となります。
さらに、以下のコードはどうでしょうか?

switch (value) {
default:
    System.out.println("valueは0でも1でも2でもありません");
case 0:
    System.out.println("valueは0です");
case 1:
    System.out.println("valueは1です");
case 2:
    System.out.println("valueは2です");
    break;
}

valueが0の場合の実行結果

valueは0です
valueは1です
valueは2です

valueが1の場合の実行結果

valueは1です
valueは2です

valueが2の場合の実行結果

valueは2です

valueが3の場合の実行結果

valueは0でも1でも2でもありません
valueは0です
valueは1です
valueは2です

どの値にも当てはまらない場合の処理を書くためのdefaultが、フォールスルーで意味のないものになっています。
フォールスルーはバグの原因となり危険なため、他のプログラミング言語では記述できない仕様になっているものもあります。
フォールスルーを使用する場合は、最新の注意を払う必要があります。

switch文の使い方総まとめ

switch文の使い方についてさらに詳しく知りたいときはこちらの記事を確認してください!

まとめ

今回はswitch文のdefaultについて解説しました。

分岐処理のコードをわかりすくしてくれる便利なswitch文ですが、フォールスルーには注意してくださいね。

もしdefaultの使い方、フォールスルーの動きを忘れてしまったら、この記事を思い出して下さい!

この記事を書いた人

フリーランスでWebシステム開発やゲーム開発をしています。
読者の方にプログラミングの面白さをお伝えしたいです。

目次