chuyển đổi, trường hợp, mặc định - 1

"Chào, Amigo!"

"Xin chào, Bilaabo! Rất vui được gặp lại bạn. Chỉ có điều bài giảng của bạn rất hay và dễ hiểu. Không giống như Mô hình bộ nhớ Java này."

"Vâng, Bilaabo rất biết chọn bài. Hôm nay tôi sẽ kể cho các bạn nghe về câu lệnh switch."

"Tôi nghĩ ai đó đã nói với tôi về nó."

"Ellie đã làm. Vì vậy, Amigo không muốn nghe một bài học về câu lệnh chuyển đổi? Có lẽ bạn sẽ bắt đầu dạy bài học của chính mình?"

"Không, tôi muốn, tôi muốn. Hãy nghe về câu lệnh chuyển đổi."

"OK. Trong Java, có một thứ gọi là câu lệnh chuyển đổi. Thật tiện lợi khi bạn cần thực hiện một số hành động nhất định tùy thuộc vào các giá trị khác nhau của một số biến."

Ví dụ với công tắc mã tương đương
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");
}

Câu lệnh switch cho phép bạn chuyển đến đoạn mã mong muốn nếu biến được truyền cho nó khớp với giá trị theo sau từ khóa.

Nếu i là 1, thì quá trình thực thi sẽ chuyển đến dòng được đánh dấu «trường hợp 1».

Nếu tôi là 2, thì quá trình thực thi sẽ chuyển đến dòng được đánh dấu «trường hợp 2».

Nếu tôi là 3, thì quá trình thực thi sẽ chuyển đến dòng được đánh dấu «trường hợp 3».

"Nếu không có bước nhảy tới bất kỳ trường hợp nào, thì khối «mặc định» sẽ được thực thi."

"Tôi hiểu rồi. Và bên phải cũng logic tương tự, nhưng được triển khai bằng cách sử dụng câu lệnh if?"

"Chuẩn rồi."

"Và từ 'break' là sao? Anh nói nó chỉ có thể được sử dụng trong các vòng lặp?"

"Vâng, và đây. Khi câu lệnh break được thực hiện, chúng ta sẽ thoát khỏi switch ngay lập tức ."

"Nhưng nếu bỏ câu lệnh break, thì tất cả các dòng bên trong switch sẽ được thực hiện cho đến khi kết thúc."

Ví dụ Đầu ra (với i = 1) Đầu ra (với 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"); }
một
hai
ba
nhiều
hai
ba
nhiều

"Trên thực tế, trường hợp là một nhãn trong mã. Trong câu lệnh chuyển đổi, chúng tôi chuyển sang nhãn tiếp theo và bắt đầu thực thi tất cả mã cho đến khi kết thúc chuyển đổi hoặc cho đến khi chúng tôi gặp câu lệnh ngắt."

"Vì vậy, nếu chúng ta không viết dấu ngắt, thì dòng mà chúng ta nhảy tới sẽ được thực hiện, tiếp theo là tất cả các dòng khác cho đến dấu ngoặc nhọn. Đúng không?"

"Đúng."

"Miếng bánh thôi. Nhưng tôi thích sử dụng câu lệnh if hơn. Họ không có những câu lệnh ngắt vô nghĩa này."

"Đúng là câu lệnh if thường nhỏ gọn hơn. Nhưng câu lệnh switch đôi khi dễ đọc hơn."

"So sánh:"

Ví dụ với công tắc mã tương đương
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"
}

"Tôi sẽ không nói rằng nó dễ đọc hơn."

"Được rồi, nhưng còn ví dụ này thì sao?"

Ví dụ với công tắc mã tương đương
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, ví dụ của bạn có vẻ không đúng lắm. Vì vậy, tôi có thể bỏ qua câu lệnh ngắt nếu tôi sử dụng return?"

"Đúng vậy. Một câu lệnh trả về sẽ ngay lập tức thoát khỏi phương thức."

"Có vẻ như các câu lệnh if luôn nhỏ gọn hơn. Nhưng lần này câu lệnh switch hóa ra lại dễ đọc hơn."

"Phù, cuối cùng cũng được."

"Thêm một điều nữa. Bạn không cần phải viết mặc định ở cuối. Nếu không, đơn giản là sẽ không có gì xảy ra nếu không có nhãn nào khớp."

"Uh, chính xác. Giống như if-else, nhưng dễ đọc—dễ đọc hơn nhiều!"

"Tuyệt. Tôi rất vui vì bạn thích bài học của tôi."

"Ồ, tôi gần như quên mất. Ban đầu, bạn chỉ có thể sử dụng các kiểu nguyên thủy và enum trong các câu lệnh chuyển đổi. Nhưng bây giờ họ đã thêm hỗ trợ cho Chuỗi."

"Ý của ngươi là ta viết cái này?"

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

"Yep. Thuận tiện, phải không?"

"Vâng. Báo cáo chuyển đổi là tuyệt vời!"