スライドショー

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

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

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

この記事では、

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

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

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

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

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

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の使い方、フォールスルーの動きを忘れてしまったら、この記事を思い出して下さい!

LINEで送る
Pocket

無料でSEからWebエンジニアへ転職しませんか?



侍エンジニア塾では、完全未経験の方から現在SEだけどプログラミングはやっていないという経験者まで、幅広い方々の人生を好転させるプログラミング指導を行ってきました。SEの方とお話していくなかで、

  • システムエンジニアという職業だけどコードが書けない
  • 事務作業が多くスキルがないため将来が不安
  • スクールに通うと完全未経験者と同じスタートになるからレベルが合わない
という、すでに知識があるSEならではのお悩みがあることに気づきました。そんな方におすすめなのが、弊社の「転職コース 」です。

弊社では、マンツーマンでレッスンを行いますので、現在お持ちの知識レベルからカリキュラムを作成いたします。さらにこちらの転職コースは無料で受講を始められて転職成功でそのまま卒業できるというとてもお得なコースとなっています。

既に知識のあるSEといっても転職は年齢が若いほど受かりやすいため、まずは無料体験レッスンで今の現状や理想の働き方について一緒に考えていきましょう。

まずは無料体験レッスンを予約する

書いた人

せき

せき

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

おすすめコンテンツ

あなたにぴったりなプログラミング学習プランを無料で診断!

プログラミング学習の効率を劇的に上げる学習メソッドを解説