JavaRush /Blog Java /Random-VI /điều kiện Yoda
MAX
Mức độ
Киров

điều kiện Yoda

Xuất bản trong nhóm
Một bài đăng ngắn dành riêng cho tất cả những người hâm mộ Star Wars và Java / JavaRush nhân kỷ niệm 40 năm phát hành Tập V của câu chuyện về ngôi sao! Điều kiện Yoda - 1Đôi khi bạn có thể tìm thấy rất nhiều điều thú vị trên Internet, và hôm nọ tôi tình cờ thấy một phương pháp lập trình thoạt nhìn khá buồn cười có tên là điều kiện Yoda . Nói tóm lại, điều kiện Yoda (cũng là ký hiệu Yoda) là một kiểu lập trình trong đó hai phần của biểu thức so sánh quen thuộc trong câu lệnh điều kiện bị đảo ngược:
if (5 == a) {
    // do something
}
Kiểu này có thể được sử dụng trong các ngôn ngữ có cú pháp giống C, thường gặp nhất là trong các biểu thức có ifwhile.
if (0 == variable) {
    // do something
}

while (false == endingCondition) {
    // do something
}
Tại sao phải chuyển biểu thức hằng sang bên trái của toán tử so sánh? Hãy giả sử một tình huống giả định, trong đó, sau khi xem hết chín sáu phần của Saga, chúng tôi không ngủ được, ngồi xuống viết một số mã cho dự án yêu thích của mình và viết như sau:
void checkNumber(int a)
{
    if (a = 13) // Здесь-то и появляется так называемый unexpected behavior!
    {
        printf("Number is 13");
    }
}
Trong trường hợp này, mỗi khi chạy chương trình, bạn sẽ nhận được chuỗi Number is 13", bất kể đối số được truyền аvào phương thức là gì checkNumber(int a). Đây không phải là những gì chúng tôi mong đợi! Lỗi logic có thể xảy ra khá thường xuyên ở những người mới lập trình (tin tôi đi, TÔI BIẾT). Nhưng ở giai đoạn biên dịch, mã như 13 = a sẽ tạo ra lỗi mà chúng tôi chắc chắn sẽ không bỏ qua, vì giá trị số nguyên là một hằng số và do đó, không thể thay đổi (chuyển thành “a”). Điều kiện Yoda - 1

Có cả ưu và nhược điểm khi sử dụng các điều kiện của Yoda.

Bên ánh sáng:

  1. Ngăn chặn việc gán cho một biến khi mục tiêu của chúng ta là so sánh.

  2. Giải quyết vấn đề về "Hành vi không có giá trị" ( NullPointerException) // ví dụ từ Wikipedia

  3. Không có Yoda:

    String myString = null;
    if (myString.equals("foobar")) { /* ... */ }
    // This causes a NullPointerException in Java

    Với Yoda:

    String myString = null;
    if ( "foobar".equals(myString) ) { // Результат - Ложь
       /* не выполняется */
    }

Mặt tối:

  1. Khả năng đọc mã của những người sẽ xem mã của bạn trở nên phức tạp hơn, làm tăng tải trọng cho nhận thức về mã.
  2. Phạm vi hẹp, chỉ sử dụng so sánh về đẳng thức hoặc so sánh với hằng số, kiểm tra giá trị rỗng.
  3. Nhiều trình biên dịch đã “nhìn thấy” các lỗi kiểu này và cảnh báo trước về sự hiện diện của một lỗi tiềm ẩn.
Một cách thay thế cho ký hiệu Yoda có thể là các bài kiểm tra đơn vị. Vào thời Cộng hòa Cũ, người ta nói rằng việc thực hiện kiểm thử tốt sẽ đảm bảo rằng mã sẽ không có lỗi và chỉ thực hiện những gì nó được viết ra. Bạn biết những thực hành hữu ích nào? Chia sẻ kiến ​​thức của bạn trong phần bình luận! Và cũng viết tập phim yêu thích của bạn! Và cầu mong Thần lực ở bên bạn!
Bình luận
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION