Xin chào tất cả các đồng nghiệp và những người chỉ đơn giản là quan tâm.
Hôm nay chúng ta sẽ xem xét một tính năng của ngôn ngữ lập trình Java là toán tử ngắt. Đây là bài viết đầu tiên về chủ đề toán tử chuyển đổi, vì vậy nếu bạn thích nó, tôi sẽ rất vui được viết thêm. Tôi muốn lưu ý ngay rằng bài viết này chủ yếu dành cho các nhà phát triển mới bắt đầu và những sinh viên nâng cao hơn có thể không tìm thấy điều gì mới cho mình ở đây. Vì vậy, hãy đi thôi. Trong Java, có 2 cách để thay đổi thứ tự thực thi các lệnh chương trình: câu lệnh nhảy và cơ chế xử lý ngoại lệ. Có ba toán tử nhảy trong java: break, continue và return. Hôm nay tôi mời bạn xem xét kỹ hơn về nhà điều hành
break
. Xử lý ngoại lệ là một chủ đề rộng đến nỗi nó nằm ngoài phạm vi của bài viết này. Có ba cách để sử dụng câu lệnh break trong java. Cách đầu tiên và phổ biến nhất là sử dụng nó break
để thoát khỏi vòng lặp sớm, ví dụ:
public class SimpleExample {
public static void main(String[] args) {
findNumberInLoop(3);
}
public static void findNumberInLoop(int number){
for (int i = 0; i < 10; i++) {
if (i == number) {
break;
}
System.out.println(i);
}
System.out.println("cycle was finished");
}
}
Ví dụ này sẽ hiển thị:
1
2
cycle was finished
Điều này có nghĩa là khi bộ đếm vòng lặp i
bằng với tham số đã truyền number
, nghĩa là số 3, thì việc thực thi vòng lặp sẽ kết thúc sớm. Nếu chương trình có nhiều vòng lặp lồng nhau thì chỉ ngắt kết quả đầu ra từ vòng lặp trong cùng, ví dụ:
public class SimpleExample {
public static void main(String[] args) {
findNumberInLoop(3);
}
public static void findNumberInLoop(int number){
for(int i = 0; i < 5; i++) {
for (int j =0; j < 10; j++) {
if(j == number) {
break;
}
System.out.print(j);
}
System.out.println();
}
System.out.println("cycles was finished");
}
}
Ví dụ này tạo ra đầu ra:
012
012
012
012
012
cycles was finished
Như có thể thấy từ ví dụ, vòng lặp bên trong bị gián đoạn mỗi lần ở số 3 (tham số number
) và vòng lặp bên ngoài được thực thi 5 lần, như dự định. Trong java, bạn có thể sử dụng nhiều câu lệnh break trong một vòng lặp, nhưng điều này không được khuyến khích vì khả năng đọc và cấu trúc của mã bị suy giảm đáng kể. Công dụng thứ hai break
là dùng nó để làm gián đoạn việc thực thi các câu lệnh trong các nhánh switch
, ví dụ:
public class SimpleExample {
public static void main(String[] args) {
square(2);
}
public static void square(int number){
switch (number){
case 1:
System.out.println(number*number);
break;
case 2:
System.out.println(number*number);
break;
case 3:
System.out.println(number*number);
break;
}
System.out.println("after switch");
}
}
Chạy ví dụ này sẽ tạo ra kết quả:
4
after switch
Câu lệnh break chuyển quyền kiểm soát cho mã theo sau toàn bộ khối switch
. Nếu bạn không chỉ định break
trong switch
ví dụ này:
public class SimpleExample {
public static void main(String[] args) {
square(2);
}
public static void square(int number){
switch (number){
case 1:
System.out.println(number*number);
case 2:
System.out.println(number*number);
case 3:
System.out.println(number*number);
}
System.out.println("after switch");
}
}
Đầu ra sẽ không như mong đợi:
4
4
after switch
Điều này xảy ra vì sau khi khối được thực thi, case 2
chương trình tiếp tục thực thi tất cả các khối tình huống tiếp theo , điều này cho chúng ta kết quả đầu ra tương ứng. Đôi khi tính năng này của toán tử switch
có thể có lợi cho chúng ta, ví dụ:
public class SimpleExample {
public static void main(String[] args) {
compare(2);
compare(7);
compare(12);
}
public static void compare(int number){
switch (number){
case 0:
case 1:
case 2:
case 3:
case 4:
case 5:
System.out.println("number is less than 5 or equal 5");
break;
case 6:
case 7:
case 8:
case 9:
System.out.println("number is greater than 5");
break;
default:
System.out.println("number is less than 0 or greater than 9");
}
System.out.println("after switch");
}
}
Chương trình này so sánh một số đã cho với số 5 và đưa ra kết quả sau:
after switch
number is greater than 5
after switch
number is less than 0 or greater than 9
after switch
Khi một phương thức được gọi lần đầu tiên, toán tử switch
sẽ chuyển quyền điều khiển cho toán tử đó case 2
rồi đến toán tử đó break
trong case 5
. Cuộc gọi thứ hai tương tự như cuộc gọi đầu tiên, nhưng bắt đầu bằng c case 7
. Cuộc gọi thứ ba không tìm thấy giá trị phù hợp trong số tất cả các trường hợp, do đó toán tử được thực thi default
. Cách thứ ba là sử dụng toán tử break
thay vì goto
toán tử C. Để thực hiện việc này, chúng ta sẽ sử dụng một dạng đặc biệt của toán tử break
được gọi break
bằng nhãn. Biểu mẫu này trông giống như break метка;
một Nhãn - đây thường là bất kỳ tên phù hợp nào từ không gian tên java, đứng trước một khối mã. Hơn nữa, sau khi áp dụng khối mã này break
có nhãn, mã sẽ tiếp tục được thực thi từ vị trí sau khối mã có nhãn tương ứng, ví dụ:
public class SimpleExample {
public static void main(String[] args) {
howWeUseLabels(true);
System.out.println();
howWeUseLabels(false);
}
public static void howWeUseLabels(boolean bool) {
firstBlock:{
secondBlock:{
thirdBlock:{
System.out.println("We will see it always");
if(bool) {
break secondBlock;
}
System.out.println("We won't see it if bool == true");
}
System.out.println("We won't see it if bool == true");
}
System.out.println("We will see it always");
}
}
}
Ví dụ này sẽ tạo ra kết quả sau:
We will see it always
We will see it always
We will see it always
We won't see it if bool == true
We won't see it if bool == true
We will see it always
Sau lệnh gọi phương thức đầu tiên, toán tử break
chuyển quyền điều khiển đến cuối khối secondBlock
, thoát ra secondBlock
và thirdBlock
trong khi thực thi toán tử khác println()
ở cuối khối firstBlock
. Sau cuộc gọi thứ hai, tất cả các dòng sẽ được hiển thị trên màn hình. Nhãn cũng có thể được sử dụng để biểu thị chu kỳ. Cần nhớ rằng bạn chỉ có thể truy cập nhãn từ bên trong khối mã được chỉ định bởi nhãn; ví dụ: mã như vậy sẽ không được biên dịch:
public class SimpleExample {
public static void main(String[] args) {
label:{
System.out.println("inside label");
}
if(true) {
break label;
}
System.out.println("This is error");
}
}
Lưu ý về độ rõ ràng của mã và câu lệnh break
: Nói chung có lời khuyên được chấp nhận là sử dụng câu lệnh break
thật cẩn thận, vì việc sử dụng break
làm cho vòng lặp khó hiểu hơn và buộc người lập trình phải nhìn vào bên trong vòng lặp để hiểu các sắc thái hoạt động của nó. Có một quy tắc heuristic mà break
bạn có thể sử dụng một cách tự tin hơn trong các vòng lặp ngắn hơn và thận trọng hơn trong các vòng lặp dài và được lồng sâu, vì điều này làm tăng khả năng xảy ra lỗi và làm phức tạp việc đọc và hiểu mã của bạn bởi các lập trình viên khác. Như tôi đã viết ở trên, việc sử dụng một số lượng lớn break
... rải rác trong mã cho thấy rằng lập trình viên không hiểu đầy đủ lý do tại sao anh ta lại viết mã theo cách anh ta đã làm. Có thể đáng xem xét việc tái cấu trúc một vòng lặp như vậy bằng cách chia nó thành nhiều vòng nhỏ hơn. Hãy cố gắng cẩn thận khi sử dụng break
nhãn thay thế cho goto
, vì điều này làm phức tạp cấu trúc mã. Đó là tất cả những gì tôi muốn nói với bạn hôm nay về toán tử break
trong java. Tôi sẽ vui mừng đón nhận những lời chỉ trích mang tính xây dựng và tôi cũng sẵn sàng viết phần tiếp theo về các toán tử continue
và return
, nếu bạn quan tâm.
GO TO FULL VERSION