CodeGym /Blog Java /Ngẫu nhiên /Toán tử bậc ba

Toán tử bậc ba

Xuất bản trong nhóm
CHÀO! Bài học hôm nay sẽ không dài lắm, nhưng nó chắc chắn sẽ hữu ích :) Chúng ta sẽ nói về cái gọi là toán tử bậc ba . Toán tử bậc ba - 1Ternary có nghĩa là " bao gồm ba phần ". Nó là một giải pháp thay thế cho if-elsecâu lệnh luồng điều khiển mà bạn đã gặp. Hãy đưa ra một ví dụ. Giả sử ai đó quyết định đi xem một bộ phim xếp loại R (dưới 17 tuổi cần có cha mẹ hoặc người lớn giám hộ đi cùng). Người mở cửa kiểm tra tuổi của anh ta ở cửa: nếu anh ta vượt qua cuộc kiểm tra tuổi, anh ta được phép vào; nếu không, anh ta được gửi về nhà. Hãy khai báo một Personlớp và kiểm tra điều này bằng cách sử dụng một if-elsecâu lệnh:

public class Person {

   private int age;

   public Person(int age) {
       this.age = age;
   }

   public int getAge() {
       return age;
   }

   public void setAge(int age) {
       this.age = age;
   }

   public static void main(String[] args) {

       Person person = new Person(22);

       String usherResponse;

       if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }

       System.out.println(usherResponse);

   }
}
Đầu ra bảng điều khiển:

"Everything is in order. Come in!"
Nếu chúng tôi xóa đầu ra của bàn điều khiển, thì kiểm tra của chúng tôi sẽ như thế này:

if (person.getAge() >= 18) {
           usherResponse = "Everything is in order. Come in!";
       } else {
           usherResponse = "This film is not suitable for your age!";
       }
Logic ở đây rất đơn giản: một điều kiện được kiểm tra (tuổi >= 18) Dựa trên kết quả, biến usherResponseđược gán một trong hai chuỗi với phản hồi của người mở. Những tình huống như vậy ("một điều kiện - hai kết quả có thể xảy ra") là cực kỳ phổ biến trong lập trình. Và đó là lý do tại sao toán tử bậc ba được tạo ra. Chúng ta có thể sử dụng nó để đơn giản hóa việc kiểm tra của mình thành một dòng mã:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = (person.getAge() > 18) ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
Đây là cách toán tử này hoạt động. Nó được gọi là toán tử bậc ba, vì nó bao gồm 3 thành phần:
  • Một điều kiện ( person.getAge() > 18)
  • Hai kết quả có thể xảy ra ( "Mọi thứ đều ổn. Mời vào!""Bộ phim này không phù hợp với lứa tuổi của bạn!" )
Đầu tiên, chúng ta viết điều kiện, tiếp theo là dấu chấm hỏi.

person.getAge() > 18 ?
"Người này hơn 18 tuổi sao?" Sau đó, chúng tôi viết giá trị đầu tiên . Giá trị này được sử dụng nếu điều kiện đánh giá làtrue :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!"
Người này có trên 18 tuổi không? Nếu có, hãy đặt usherResponse biến thành "Mọi thứ đều theo thứ tự. Mời vào!" Tiếp đến là biểu tượng " :" và giá trị thứ hai . Giá trị này được sử dụng nếu điều kiện đánh giá làfalse :

String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";
Người này có trên 18 tuổi không? Nếu có, hãy đặt usherResponse biến thành "Mọi thứ đều theo thứ tự. Mời vào!" . Nếu không, hãy đặt usherResponse biến thành "Phim này không phù hợp với lứa tuổi của bạn!" Nói chung, đây là logic của toán tử bậc ba trông như thế nào. tình trạng ? kết quả 1 : kết quả 2 Toán tử bậc ba - 2 Nhân tiện, dấu ngoặc đơn xung quanh điều kiện là không bắt buộc: chúng tôi đã thêm chúng để dễ đọc hơn. Nó cũng hoạt động mà không có chúng:

public static void main(String[] args) {

   Person person = new Person(22);

   String usherResponse = person.getAge() > 18 ? "Everything is in order. Come in!" : "This film is not suitable for your age!";

   System.out.println(usherResponse);

}
Vì vậy, những gì bạn nên sử dụng? Một if-elsecâu lệnh hay toán tử bậc ba? Về hiệu suất, không có sự khác biệt. Chính xác hơn, có thể có, nhưng nó không đáng kể. Cân nhắc lớn nhất ở đây là khả năng đọc mã của bạn. Mã bạn viết không chỉ phải hoạt động chính xác mà còn phải dễ đọc . Rốt cuộc, nó có thể được "kế thừa" bởi các lập trình viên khác, đồng nghiệp của bạn! Nếu nó khó hiểu, nó sẽ làm phức tạp công việc của họ và của bạn (cứ sau 5 phút họ sẽ chạy đến chỗ bạn để giải thích). Khuyến nghị chung là: nếu điều kiện đơn giản và dễ xác minh, bạn có thể sử dụng toán tử bậc ba mà không gây hại gì. Điều này cho phép bạn giảm số lượng mã và số lượngif-elsebáo cáo (và có thể đã có rất nhiều trong số họ). Nhưng nếu điều kiện phức tạp và bao gồm nhiều bước, thì tốt hơn là sử dụng một if-elsecâu lệnh. Ví dụ: sử dụng toán tử bậc ba sẽ là một ý tưởng tồi trong trường hợp này:

String usherResponse = (person.getAge() > 18 && (person.hasTicket() || person.hasCoupon()) && !person.hasChild()) ? "Come in!" : "You can't come in!";
Nó không rõ ràng ngay lập tức những gì đang xảy ra ở đây! Mã đã trở nên rất khó đọc. Và tất cả vì điều kiện phức tạp:
  • Nếu ai đó trên 18 tuổi, có vé (hoặc thẻ miễn phí) và không có con nhỏ, anh ta có thể vào.
  • Nếu thậm chí một phần của điều kiện là sai, thì anh ta không thể.
Ở đây rõ ràng là tốt hơn để sử dụng if-else. Vâng, mã của chúng tôi sẽ lớn hơn, nhưng nó sẽ dễ đọc hơn rất nhiều. Và đồng nghiệp của bạn sẽ không phải đối mặt với lòng bàn tay nếu họ kế thừa mã này :) Cuối cùng, tôi có thể giới thiệu một điều tốt cho bạn. Chúng tôi đã đề cập đến khả năng đọc mã trong bài học. Cuốn sách "Clean Code" của Robert Martin, đã trở thành kinh điển, được dành riêng cho chủ đề này. Toán tử bậc ba - 4Nó tập hợp các phương pháp hay nhất và đề xuất dành cho lập trình viên, điều này sẽ giúp bạn viết mã không chỉ hoạt động hiệu quả mà còn dễ đọc.
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION