スイッチ、ケース、デフォルト - 1

「こんにちは、アミーゴ!」

「やあ、Bilaabo! また会えてうれしいです。あなたの講義だけがとても良くてわかりやすいです。この Java メモリ モデルとは違います。」

「はい、ビラーボはレッスンの選び方を知っています。今日はスイッチステートメントについてお話します。」

「誰かがすでにそのことについて私に話してくれたと思います。」

「エリーはそうしました。それで、アミーゴは switch ステートメントについてのレッスンを聞きたくないのですか? たぶん、あなた自身のステートメントを教え始めますか?」

「いいえ、そうしたい、そうしたいです。switch ステートメントについて聞きましょう。」

「わかりました。Java には switch ステートメントと呼ばれるものがあります。変数のさまざまな値に応じて特定のアクションを実行する必要がある場合に便利です。」

スイッチを使用した例 同等のコード
int i = 5;
switch(i)
{
 case 1:
  System.out.println("one");
  break;
 case 2:
  System.out.println("two");
  break;
 case 3:
  System.out.println("three");
  break;
 default:
  System.out.println("many");
}
int i = 5;
if (i == 1)
{
 System.out.println("one");
}
else if (i == 2)
{
 System.out.println("two");
}
else if (i == 3)
{
 System.out.println("three");
}
else
{
 System.out.println("many");
}

switchステートメントを使用すると、渡された変数がキーワード case に続く値と一致する場合に目的のコード部分にジャンプできます。

i が 1 の場合、実行は «case 1» とマークされた行にジャンプします。

i が 2 の場合、実行は«case 2»とマークされた行にジャンプします。

i が 3 の場合、実行は«case 3»とマークされた行にジャンプします。

「いずれのケースにもジャンプがない場合は、«default» ブロックが実行されます。」

「なるほど。右側は同じロジックですが、if ステートメントを使用して実装されていますね?」

「はい。」

「それで、『ブレイク』という言葉はどういうことですか? ループ内でのみ使用できると言ったじゃないですか?」

「はい、ここです。break ステートメントが実行されると、すぐにスイッチを終了します。」

「しかし、break ステートメントが削除されると、スイッチ内のすべての行が最後まで実行されます。」

出力 (i = 1 の場合) 出力 (i = 2 の場合)
switch(i)
{
 case 1:
  System.out.println("one");
 case 2:
  System.out.println("two");
 case 3:
  System.out.println("three");
 default:
  System.out.println("many"); }
一つ
、二つ、
三つ、
た​​くさん
2つ
3つ
たくさん

「実際、case はコード内のラベルです。switch ステートメントでは、次のラベルにジャンプし、switch の終わりまで、または Break ステートメントに到達するまで、すべてのコードの実行を開始します。」

「ということは、break を書かないと、ジャンプ先の行が実行され、続いて右中括弧までの他のすべての行が実行されます。そうですか?」

"はい。"

「簡単です。しかし、私は if ステートメントを使用する方が好きです。それらには、このような無意味な Break ステートメントはありません。」

「確かに、if ステートメントの方がコンパクトであることがよくあります。しかし、switch ステートメントの方が読みやすい場合もあります。」

"比較:"

スイッチを使用した例 同等のコード
public String getName(int i)
{
 switch(i)
 {
  case 1:
   return "one";
  case 2:
   return "two";
  case 3:
   return "three";
  default:
   return "many";
}
public String getName(int i)
{
 if (i == 1)
  return "one";

 if (i == 2)
  return "two";

 if (i == 3)
  return "three";

return "many"
}

「読みやすいとは言えません。」

「わかりましたが、この例はどうでしょうか?」

スイッチを使用した例 同等のコード
public String getName(int i)
{
 switch(i)
 {
  case 1:
  case 2:
   return "one or two";
  case 3:
  case 4:
  case 5:
   return "three to five";
  default:
   return "many";
}
public String getName(int i)
{
 if (i == 1 || i == 2)
  return "one or two";

 if (i == 3 || i == 4 || i == 5)
  return "three to five";

return "many"
}

「ビラーボ、あなたの例はあまり正しくないようです。では、return を使用すれば、break ステートメントを省略できますか?」

「そうです。return ステートメントはすぐにメソッドを終了します。」

「if ステートメントは常にコンパクトであるように思えます。しかし、今回は switch ステートメントがより読みやすいことが判明しました。」

「ふー、ついに。」

「もう 1 つ。最後にデフォルトを記述する必要はありません。そうしないと、どのラベルも一致しない場合には何も起こりません。」

「ああ、そのとおりです。if-else と似ていますが、読みやすいです。はるかに読みやすいです!」

「よかったです。私のレッスンを気に入っていただけてうれしいです。」

「ああ、忘れるところでした。当初、switch ステートメントではプリミティブ型と列挙型しか使用できませんでした。しかし今では、文字列のサポートが追加されました。」

「私がこれを書くということですか?」

public int getNumber(String number)
{
 switch(number)
 {
  case "one":
   return 1;
  case "two":
   return 2;
  case "three":
   return 3;
  default:
   return -1;
 }
}

「はい、便利ですよね?」

「はい。Switch ステートメントは素晴らしいです!」