【Java入門】switch文について
  • facebookページ
  • twitterページ
  • 2017.09.09

    【Java入門】switch文について

    Java言語の条件分岐

    Java言語には、条件分岐の処理として、if文とswitch文があります。

    条件分岐とは、文字通り、条件によってプログラムの処理の流れを変えることです。多くの倍、if文を用いますが、場合によっては、switch文を用いると大変便利です。

    if文とswitch文

    では、switch文は、どのような仕組みで、どのように用いればよいのかを、具体的な例をあげて説明していくことにします。

    例えば、if文で以下のような処理を記述したとします。

    このような場合は、switch文を用いると、以下のように記述できます。

    switch文を用いると、if~elseifなどを用いるよりも、分岐の多い処理の場合は記述が楽になる場合もあります。

    switch文の書式

    switch文の書式は、以下のようになります。

    switch(値){
    case 値①:
    処理①
    break;
    case 値②:
    処理②
    break;

    default:
    処理③
    break;
    }

    ()内に書かれている値が値①をとれば、処理①を、値②であれば、処理②を実行するという流れです。caseが値を表し、break文が、その処理の終了を表します。

    caseの数はいくら設定してもかまいません。if文にたとえるのならば、ifおよびelise ifにあたるのがこの部分です。

    最後のdefaultは、値がcase文のどれにもあてはまらなかった場合の処理です。if文であれば、elseに当たる処理です。

    ほぼ同じことが出来るにもかかわらず、switch文を用いると、if文よりもはるかに見やすく、しかも効率的にプログラミングが出来ます。

    switch文は、if文が具体的に何らかの値(整数の値など)をとるときには、置き換えることが出来るので、大変便利です。ただし、数値が何らかの範囲をとる場合などは、適用できないので、注意が必要です。

    switch文の注意点

    フォールスルー

    switch文には、注意すべき点がいくつかあります。その一つが、以下のようなケースです。

    このような場合、numの値が1か2の場合、「ONE OR TWO」と、同じ結果が得られます。

    caseの後にbreakを書くことは決まりではないため、このようにわざとbreakを省略することが出来るのです。

    このようなやりかたのことを、フォールスルーといいます。

    ここでは、case 1の処理とbreakを省略することによって、case 1とcase 2が、同じ結果になるようにしているわけです。

    フォールスルーは、このサンプルのように、意図的に行うこともあります。しかし、気をつけなければならないケースもあります。

    この例では、numの値が2なので、「TWO」,「THREE」,「不適切な値です。」の全てが表示されてしまいます。

    このようなケースは、処理が複雑になりやすい上にソースコードを見たときに、意図的にbreakを記述しなかったのか、それともbreakを記述し忘れたのか、区別がつきにくく、バグを有無温床になりますので、気をつけましょう。

    他の言語の場合

    もともとJava言語は、C言語をベースに作られています。switch文も最初はほぼそのまま同じような仕様になっています。

    もともとこの部分はC言語で問題になっていたのですが、Java言語のswitchも、C言語とまったく同じ問題を持っているのです。

    参考までに、Swift言語はこのフォールスルーの問題を回避するために、switch文ではそもそもbreakを書く必要が無い仕様になっています。

    また、Rubyのように、そもそもswitch文を廃止している言語もあります。

    switch文とenum

    さて、今までは、整数の場合のswitch文を説明してきましたが、Javaのswitch文では、それ整数の値以外でもswitch文を記述することが出来ます。

    たとえば、列挙型enumが、良い例です。

    enumは列挙型と言われるもので、もともとC言語にも存在していたもので、Javaでも使用できるようになっています。

    C言語で、列挙型とswitchを組み合わせるケースはしばしば用いられます。すでに述べたように、Java言語はC言語をベースに開発された言語なので、その考え方は受け継がれています。

    例えば、以下のサンプルをみてみましょう。

    enumを使えば、数値の変わりに、このようなキーワードを用いたswitch文を作ることが出来ます。

    数値では判りずらく、なんらかのキーワードや定数のようなものを使って処理を分岐させたい場合は、大変便利です。

    Javaのバージョンによる違い

    ところで、ここまでくると、「switch文で、文字列を使うことは出来るだろうか」という疑問も当然のことながらわいてくるでしょう。

    その応えは、「YES」でもあり、「NO」でもあります。

    どういうことかというと、Stringを使ったsiwtch文が使えるのは、Javaのバージョン次第ということです。

    例えば、以下のようなサンプルがあったとします。

    このような処理が行えるのは、あくまでもJava SE 7以上です。それよりも前のバージョンでは、エラーになります。

    Stringでのswitch文を用いる場合は、いろいろな意味で注意が必要です。前述のように、Javaコンパイラのバージョンによって、使える・使えないということが決まりますので、自分が今使っているコンパイラのバージョンが何なのかを確認する必要があります。

    それ以前のバージョンで同様の処理をしたいのであれば、enumを用いるのが妥当です。また、Java SE 7以上であっても、実際に運用するときには注意が必要です。

    文字列を用いる場合、Stringは基本データ型ではなくクラスなので、switch文の()内が、nullにる可能性があります。その際、NullPointerExceptionが発生する可能性があります。そのため、場合によってはヌルチェックや例外処理の記述が必要となります。

    なお、参考までに最後に、switch文で使える型を説明しておくと、int、short、char、byte、enum、Stringです。前述のように、Stringが使えるのはJava SE 7以上です。

    最後に

    このように、Java言語では、C言語と同じようにswitch文を用いることが出来ます。ただ、C言語同様にフォールスルーの部分に注意する必要があるのと、コンパイラのバージョンによって扱えるデータが異なります。

    逆に言えば、以上のことに気をつけながら作業を行えば、siwtch文は大変便利です。


    ポテパンが提供するサービスについて

    本メディア「ポテパンスタイル」を運営する株式会社ポテパンは、エンジニアキャリア領域で複数サービスを提供しています。

    ポテパンフリーランス

    ポテパンフリーランス

    フリーランスエンジニアの方に高単価案件をご紹介しております。弊社ではフリーランス案件を常時300件ほど保有しており、その中からあなたに適した案件をご案内いたします。また、これから独立してフリーランスになる方の無料個別相談も承っております。フリーランスになった後の案件獲得方法やお金面(税金や保険など)についてお答えいたします!

    ポテパンキャリア

    ポテパンキャリア

    エンジニア職専門の転職エージェントです。ポテパンキャリアでは、技術のわかるエージェントがあなたの転職をサポートします。エージェント自身がエンジニアなので、あなたと同じ目線で仕事内容や今後のキャリアについて一緒に考えることができます。

    ポテパンキャンプ

    ポテパンキャンプ

    ポテパンキャンプでは、RubyにてゼロからオリジナルのECサイトを作り上げてる3ヶ月間の実践型カリキュラムを提供しております。すでに本スクールの卒業生は、エンジニア職として様々な企業様に就職しております。なお、本スクールは受講料10万円と他社スクールに比べ格安となっており、またポテパンからご紹介させていただいた企業へ就職が決まった場合は、全額キャッシュバックいたします。



    株式会社ポテパンは、企業とエンジニアの最適なマッチングを追求しています。気になるサービスがあれば、ぜひ覗いてみてください!

    ポテキャンバナー ポテキャリバナー

    この記事をシェア

    • Facebookシェア
    • Twitterシェア
    • Hatenaシェア
    • Lineシェア

    話題の記事

    まだデータがありません。

    関連ワード

    pickup









    ABOUT US

    ポテパンはエンジニアと企業の最適なマッチングを追求する企業です。

    READ MORE