- vừa được xem lúc

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

0 0 32

Người đăng: logbasex

Theo Viblo Asia

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 x khô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

Bình luận

Bài viết tương tự

- vừa được xem lúc

Tổng hợp các bài hướng dẫn về Design Pattern - 23 mẫu cơ bản của GoF

Link bài viết gốc: https://gpcoder.com/4164-gioi-thieu-design-patterns/. Design Patterns là gì. Design Patterns không phải là ngôn ngữ cụ thể nào cả.

0 0 302

- vừa được xem lúc

Học Spring Boot bắt đầu từ đâu?

1. Giới thiệu Spring Boot. 1.1.

0 0 278

- vừa được xem lúc

Cần chuẩn bị gì để bắt đầu học Java

Cần chuẩn bị những gì để bắt đầu lập trình Java. 1.1. Cài JDK hay JRE.

0 0 51

- vừa được xem lúc

Sử dụng ModelMapper trong Spring Boot

Bài hôm nay sẽ là cách sử dụng thư viện ModelMapper để mapping qua lại giữa các object trong Spring nhé. Trang chủ của ModelMapper đây http://modelmapper.org/, đọc rất dễ hiểu dành cho các bạn muốn tìm hiểu sâu hơn. 1.

0 0 194

- vừa được xem lúc

[Java] 1 vài tip nhỏ khi sử dụng String hoặc Collection part 1

. Hello các bạn, hôm nay mình sẽ chia sẻ về mẹo check String null hay full space một cách tiện lợi. Mình sẽ sử dụng thư viện Lớp StringUtils download file jar để import vào thư viện tại (link).

0 0 71

- vừa được xem lúc

Deep Learning với Java - Tại sao không?

Muốn tìm hiểu về Machine Learning / Deep Learning nhưng với background là Java thì sẽ như thế nào và bắt đầu từ đâu? Để tìm được câu trả lời, hãy đọc bài viết này - có thể kỹ năng Java vốn có sẽ giúp bạn có những chuyến phiêu lưu thú vị. DJL là tên viết tắt của Deep Java Library - một thư viện mã ng

0 0 139