異世界現地人でもわかるJavaプログラミング#6(switch編)
warning:本記事の内容の正確性は”なんら”保証されておりません。
おはこんばんちは。
今回は、無くても困らないけれど、知っていると便利なswitch文です。
相変わらずC言語の知識でやってます。
お決まりのごとく、
https://paiza.io/ja さんのお世話になります。
(コード作成を試してみる(無料)→左上の緑の言語選択(javaじゃなかったら)言語をJavaに切り替え)
今回も、
// Your code here!
と書かれているところを色々編集していきます。
定数
定数という概念を覚えておくと便利です。なくてもなんとかなるのですが、使うとコードが見やすくなります。C言語で「#define」とかいう書き方があったのでそんなかんじかなと思ったらJavaさんでは違うみたい。
final int kyuukakerukyuu = 81
定数も変数の一種らしいです。お馴染みのintさんで、宣言してみました。
finalが付いているので、この変数だか定数のkyuukakerukyuuの値は、81から変更できません。
普通に81を数字で書いてもよいのですが、
・ある程度固定だけど、たまに値が変わる数字 とか、
・プログラムで処理しやすいように色んな種別に数値を割り振る
みたいなときに使います。
ちなみに、上の宣言文では文末の「;」が無いのでエラーになりますね。たまに忘れてしまいます。
さて、後者の「色んな種別とかに数値を割り振る」でswitch文を書いてみましょう。switch-case文と言われたりもします。
これは、if文でも実現可能なのですが、圧倒的に見やすくなるしタイプ数が減るのかもしれません。
まずは、下準備として、定数をみっつほど宣言してみます。
//動物の種別を定義する
final int inu = 1;
final int neko = 2;
final int kaba = 3;
int mnohumohu;//これは作業用の変数みたいなもの
上のfinal3つが、今回使う定数です。
そして、switch.
今回のモフモフはお犬さんだということにします。
//動物の種別を定義する
final int inu = 1;
final int neko = 2;
final int kaba = 3;
int mohumohu;//これは作業用の変数みたいなもの
mohumohu = inu;
switch(mohumohu){
case inu:
System.out.println("犬です");
break;
case neko:
System.out.println("猫です");
break;
case kaba:
System.out.println("カバです");
break;
default:
System.out.println("謎の生物です");
break;
}
mohumohu = inu; のところで、mohumohuに1が入ります。
こんな短いプログラムだと、おかしな処理に見えますが、実際に便利なプログラムを組むときには、もう少し高度で有用でそうするべきだと感覚的にも伝わるような使い方になるはずです。
で、switchと書いて、()の中に、どの変数の値を見て分岐するか、その変数を書きます。今回はmohumohuですね。
そして、case。これは、普通に犬のケースでは、犬の場合は、という風に理解すればOK。最後に「:」を書くのはそういうルールです。
(「case 1:」のように定数じゃない数字も書けます。ですがそれだと後から1が犬だったか、猫だったかパッと見てわからなくなることが多いので(他人の書いたプログラムならなおさら)定数にしてわかりやすくするみたい)
で、その次には行いたい処理を書きます。今回は動物さんの種類によって、その種類を出力するだけです。
最後に、Break;
これは、そのブロックの処理から抜ける、みたいなことです。
case inu: のところの処理にひっかかかったら(処理を実行したら)、以降にnekoだったりkabaだったりすることはありませんので、switch文の処理は終わりですー、みたいな。
case 種別(とか分岐の際に判定する値):
処理~
break;
この塊を必要な分だけ書きます。
最後の「default」は、どれにも該当しない場合に通る場所です。
あえてそういう処理を組み込んだり、エラー処理に使ったりします。
駆け足でしたが、switch~caseについてはこんな感じです。
先述の通り、if文でもelse if を何個も組み合わせれば同じ処理を行うことは可能です。
ただ、読みやすくなるとかのメリットがありますので、switch文で書ける場合はswitchにした方がスマートです。
逆に、ifの条件が複雑な場合は、switchでは実現できないことが多々あります。
では~。
次回は二次元配列とかですかね。