Cách hoạt động của các toán tử logic trong Java

Toán tử logic hầu là một trong những phần đầu tiên mà bất kỳ lập trình viên nào mới học lập trình đều đã học qua. Thế nhưng ẩn chứa bên trong nó vẫn còn khá nhiều điều thú vị mà chắc hẳn các bạn sẽ không ngờ đến.

Cơ chế hoạt động

Khi bạn kết hợp nhiều toán tử && hoặc || lại với nhau như thế này

A && B && C && D

Hoặc 

A || B || C || D

Thì các toán tử logic ở trên sẽ thực hiện theo thứ tự từ trái sang phải và tuân theo quy tắc

  • Trong loạt điều kiện && kết hợp nếu có một điều kiện false thì kết quả trả về false, các điều kiện còn lại phía bên phải sẽ không được thực hiện.
  • Trong loạt điều kiện || nếu có một điều kiện trả về true thì kết quả trả về là true, các điều kiện còn lại phía bên phải sẽ không được thực hiện.
public class Student {
    private String name;
    private int score;

    public Student(String name, int score) {
        this.name = name;
        this.score = score;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public int getScore() {
        return score;
    }

    public void setScore(int score) {
        this.score = score;
    }
}
public class Main {
    public static void main(String[] args) {
        Student student = new Student("HGA", 3);
        if (student != null && student.getScore() > 5 && student.getName().startsWith("H")) {
                System.out.println("ok");

        }
    }
}

Chúng ta có 3 điều kiện 

  1.  student != null
  2.  student.getScore() > 5
  3.  student.getName().startsWith(“H”)

Với student mình đã khởi tạo ở trên, điều kiện (1) sẽ true, (2) false (score = 3), lúc này chương trình sẽ tiến hành trả về false mà không thực hiện tiếp tục (3).

Tương tự đối với ||, chúng ta xét ví dụ sauP


Kết quả trả về là true mặc cho student.getName().startsWith(“Z”) là một điều kiện false.

Áp dụng

Dựa vào tính chất ở phần trên mà chúng ta có thể viết các câu điều kiện ngắn gọn hơn một xíu nè. 

Ví dụ mình có một hàm isPass() nhận tham số là Student, hàm này sẽ trả về true nếu score >= 5, false nếu ngược lại. Thế nhưng để chắc chắn thì mình sẽ phải kiểm tra thêm Student truyền vào phải khác null để tránh trường hợp xảy ta NullPointerException.

public boolean isPass(Student student) {
    if (student != null) {
         if (student.getScore() >=5) {
             return true;
         }
    }
    return false;
}

Code trên là ổn chúng ta phải kiểm tra khác null trước rồi mới kiểm tra score. Thế mình viết lại thế này các bạn đoán xem có sai không nhé.

public boolean isPass(Student student) {
    if (student != null && student.getScore() >= 5) {
        return true;
    }
    return false;
}

Mình đã gộp 2 điều kiện lại thành một trong nó có vẽ đẹp thế nhưng mà nó có bị nullPointer không nhỉ? 

Trả lời: Không nhé, theo thứ tự nó sẽ kiểm tra student != null, nếu student có giá trị null thì hàm sẽ tiến hành trả về false mà không cần kiểm tra điều kiện student.getScore >= 5. Vậy nên chúng ta sẽ không ăn exception nullpointer đâu nhé.

Những điểm nhỏ này có thể giúp code chúng ta đẹp hơn xíu và giảm thiểu các điều kiện lồng rối mắt  😆 

5 1 vote
Article Rating
Subscribe
Notify of
guest
0 Comments
Inline Feedbacks
View all comments
0
Would love your thoughts, please comment.x
()
x