Fine-grain refactoring deep dive (9) – Boolean expression.

1. Order of operand Cho bài toán sau: Với một số x cho trước, hãy viết biểu thức boolean để kiểm tra xem x có nằm trong khoảng – open intervals (1, 10) hay không? Nếu có, hãy in ra màn hình giá trị của x. Tức là chúng ta cần kiểm ta điều kiện

1. Order of operand

Cho bài toán sau: Với một số x cho trước, hãy viết biểu thức boolean để kiểm tra xem x có nằm trong khoảng – open intervals (1, 10) hay không? Nếu có, hãy in ra màn hình giá trị của x.

Tức là chúng ta cần kiểm ta điều kiện 1 < x < 10 có thỏa mãn hay không. Nào, cùng điểm qua một vài cách viết:

if(1< x &&10> x){//print}...if(x >1&&10> x){//print}

Bạn thấy gì qua ví dụ trên? Nhiều khả năng bạn sẽ thấy bình thường, nhưng với cá nhân mình thì có chút gì đấy hơi thiếu tự nhiên, không ăn khớp giữa luồng suy nghĩ và flow của code. Bởi vì x là đối tượng trung tâm của bài toán này, x phải là đối tượng xuất hiện đầu tiên trong biểu thức so sánh (comparison expression) thay vì đối tượng được so sánh với x. Thế nên mình viết lại biểu thức trên theo một cách mà đối với mình là tự nhiên nhất như sau:

if(x >1&& x <10){//print}

2. De Morgan’s Laws (Equivalent Boolean Expressions)

Cho bài toán sau: Với một số x cho trước, hãy viết chương trình in ra giá trị của x nếu xkhông thỏa mãn cả hai điều kiện:

  • x lớn hơn 1
  • x nhỏ hơn 10

Và bạn sẽ viết chương trình như thế này:

if(!(x >1&& x <10)){//print}

Đoạn code này thì đã thành công trong việc biểu diễn luồng suy nghĩ nhưng lại có một chút hơi khó đọc, tạo nên bối rối cho người khác vì theo như kinh nghiệm của mình thì biểu thức boolean dạng như thế này tương đối ít gặp do đó bộ não khi nhận được tín hiệu sẽ bị delay khi xử lý. Và câu chuyện bây giờ là áp dụng De Morgan’s Laws để chuyển biểu thức boolean trên thành một dạng phổ biến hơn:

if(!(x >1)||!(x <10)){//print}

Định luật này được phát biểu như sau:

  • The negation of a conjunction is the disjunction of the negations (Phủ định của một phép hội là phép tuyển của những phủ định)
  • The negation of a disjunction is the conjunction of the negations (Phủ định của một phép tuyển là phép hội của những phủ định).

image.png

References

Nguồn: viblo.asia

Bài viết liên quan

Sự Khác Nhau Giữa Domain và Hosting Là Gì?

Sự khác nhau giữa domain và hosting là gì? Bài này giải thích ngắn và dễ hiểu nh

Shared Hosting hay VPS Hosting: Lựa chọn nào dành cho bạn?

Bài viết giải thích rõ shared hosting và vps hosting là gì và hướng dẫn chọn lựa

Thay đổi Package Name của Android Studio dể dàng với plugin APR

Nếu bạn đang gặp khó khăn hoặc bế tắc trong việc thay đổi package name trong And

Lỗi không Update Meta_Value Khi thay thế hình ảnh cũ bằng hình ảnh mới trong WordPress

Mã dưới đây hoạt động tốt có 1 lỗi không update được postmeta ” meta_key=