suis, kes, lalai - 1

"Hai, Amigo!"

"Hai, Bilaabo! Senang berjumpa dengan awak lagi. Cuma ceramah awak sahaja yang bagus dan boleh difahami. Tidak seperti Model Memori Java ini."

"Ya, Bilaabo tahu cara memilih pelajaran. Hari ini saya akan memberitahu anda tentang pernyataan suis."

"Saya rasa seseorang sudah memberitahu saya mengenainya."

"Ellie ada. Jadi, Amigo tidak mahu mendengar pengajaran tentang pernyataan suis? Mungkin anda akan mula mengajar anda sendiri?"

"Tidak, saya mahu, saya mahu. Mari kita dengar tentang kenyataan suis."

"OK. Di Java, terdapat sesuatu yang dipanggil pernyataan suis. Ia mudah apabila anda perlu melakukan tindakan tertentu bergantung pada pelbagai nilai bagi beberapa pembolehubah."

Contoh dengan suis Kod yang setara
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");
}

Pernyataan suis membolehkan anda melompat ke sekeping kod yang diingini jika pembolehubah dihantar kepadanya sepadan dengan nilai yang mengikuti kes kata kunci .

Jika i ialah 1, maka pelaksanaan akan melompat ke baris bertanda «kes 1».

Jika i ialah 2, maka pelaksanaan akan melompat ke garisan bertanda «kes 2».

Jika i ialah 3, maka pelaksanaan akan melompat ke garisan bertanda «kes 3».

"Jika tiada lompatan ke mana-mana kes, maka blok «lalai» dilaksanakan."

"Saya faham. Dan di sebelah kanan adalah logik yang sama, tetapi dilaksanakan menggunakan pernyataan if?"

"Ya."

"Dan ada apa dengan perkataan 'break'? Awak kata ia hanya boleh digunakan dalam gelung?"

"Ya, dan di sini. Apabila pernyataan putus dilaksanakan, kami segera keluar dari suis ."

"Tetapi jika pernyataan putus dialih keluar, maka semua baris di dalam suis akan dilaksanakan sehingga tamat."

Contoh Output (untuk i = 1) Output (untuk 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"); }
satu
dua
tiga
banyak
dua
tiga
banyak

"Sebenarnya, kes ialah label dalam kod. Dalam pernyataan suis, kami melompat ke label seterusnya dan mula melaksanakan semua kod sehingga penghujung suis, atau sehingga kami bertemu dengan kenyataan putus."

"Jadi, jika kita tidak menulis break, maka baris yang kita lompat akan dilaksanakan, diikuti oleh semua baris lain sehingga pendakap penutup. Betul ke?"

"Ya."

"Sekeping kek. Tetapi saya lebih suka menggunakan pernyataan if. Mereka tidak mempunyai pernyataan putus yang sia-sia ini."

"Memang benar jika kenyataan selalunya lebih padat. Tetapi kenyataan suis kadangkala lebih mudah dibaca."

"Bandingkan:"

Contoh dengan suis Kod yang setara
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"
}

"Saya tidak akan mengatakan bahawa ia lebih mudah dibaca."

"Baiklah, tetapi bagaimana dengan contoh ini?"

Contoh dengan suis Kod yang setara
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"
}

"Bilaabo, contoh anda nampaknya tidak betul. Jadi, saya boleh meninggalkan kenyataan rehat jika saya menggunakan return?"

"Betul. Kenyataan pemulangan akan segera keluar dari kaedah."

"Nampaknya jika kenyataan sentiasa lebih padat. Tetapi kenyataan suis ternyata lebih mudah dibaca kali ini."

"Fuh, akhirnya."

"Satu lagi. Anda tidak perlu menulis lalai pada penghujungnya. Jika tidak, maka tiada apa yang akan berlaku jika tiada satu pun daripada label sepadan."

"Eh, betul-betul. Seperti if-else, tetapi boleh dibaca-lebih boleh dibaca!"

"Bagus. Saya gembira anda menyukai pelajaran saya."

"Oh, saya hampir terlupa. Pada mulanya, anda hanya boleh menggunakan jenis primitif dan enum dalam pernyataan suis. Tetapi kini mereka telah menambah sokongan untuk Strings."

"Maksud awak saya tulis ini?"

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

"Yep. Mudah, kan?"

"Ya. Pernyataan tukar adalah hebat!"