Boolean là gì?
Boolean là giá trị dùng trong câu lệnh logic để nói xem điều gì được coi là đúng (true) hoặc sai (false).
Điều này có thể dùng để ra quyết định.
Trong Ruby, chúng ta không có class Boolean, nhưng chúng ta có object boolean!
Chúng ta có true và false.
Đó là các object singleton của TrueClass và FalseClass.
Bạn nhận được giá trị boolean khi dùng các phương thức như:
empty?all?match?
Và so sánh mọi thứ bằng dấu bằng:
1 == 1 # true
Hãy nhớ rằng == trong Ruby cũng là một phương thức, nghĩa là hành vi có thể thay đổi tùy thuộc vào cách phương thức này được triển khai.
Giá trị Truthy & Falsy
Giá trị truthy là gì?
Đó là giá trị được coi là true trong ngữ cảnh boolean, như câu lệnh if.
Mọi thứ trong Ruby đều truthy TRỪ hai giá trị này:
falsenil
Hai giá trị này, và CHỈ hai giá trị này, chúng ta gọi là "falsy".
Boolean trong thực tế
Điều này có nghĩa là nếu bạn có một điều kiện…
Như thế này:
if bacon puts "we got bacon" end
Ruby kiểm tra xem bacon có truthy (bất cứ thứ gì trừ false / nil) trước khi in chuỗi.
Nói cách khác:
Bạn không phải kiểm tra nil nếu bạn không gọi phương thức trên bacon.
Toán tử an toàn (The Safe Navigator)
Đôi khi bạn muốn gọi phương thức trên đối tượng.
Như thế này:
if bacon.stock # ... end
Điều này sẽ báo lỗi nếu bacon là nil, để tránh điều này bạn có thể làm sau…
Ví dụ:
if bacon&.stock # ... end
&. này gọi là toán tử điều hướng an toàn (safe navigation operator) và được giới thiệu trong Ruby 2.3.
Phương thức Boolean (Boolean Methods)
Bạn đã từng thấy các phương thức kết thúc bằng dấu hỏi?
Như empty?.
Chúng ta gọi đây là "predicate methods" (phương thức vị từ) và theo quy ước chúng luôn trả về true hoặc false.
Bạn có thể tự viết:
def published? # ... end def ready? # ... end
Đây là pattern tuyệt vời sẽ làm cho code của bạn cảm thấy hơn Ruby.
Tham số Boolean KHÔNG phải ý tưởng hay
Chúng ta vừa nói về phương thức boolean, rất tốt, nhưng điều bạn muốn tránh là tham số boolean.
Ví dụ:
def bacon(raw) end bacon(false)
Khi bạn nhìn vào bacon(false), bạn không hiểu false này có nghĩa gì.
Bạn phải đào vào code để tìm ra.
Ngoài ra, giá trị boolean có nghĩa là phương thức của bạn sẽ phức tạp hơn cần thiết.
Giải pháp?
Tách phương thức thành hai, hoặc thiết kế code sao cho không cần thiết.
Logic Boolean (Boolean Logic)
TrueClass và FalseClass triển khai một vài phương thức.
Như to_s, và inspect.
Nhưng thú vị hơn là:
&|^
Đây là những phương thức trông kỳ lạ kia?
Logic boolean.
Bảng logic boolean:
| Tên | Ký hiệu | TRUE / TRUE | TRUE / FALSE |
|---|---|---|---|
| AND | & | true | false |
| OR | | | true | true |
| XOR | ^ | false | true |
Ví dụ:
true & true
Mặc dù chúng ta thường không dùng logic boolean trong code, nó tạo nên nền tảng cách máy tính hoạt động, nên biết về nó很有意思.
Tóm tắt
Bạn đã học về giá trị boolean trong Ruby! Hãy nhớ rằng mọi thứ đều "truthy", với chỉ hai ngoại lệ là false và nil.
Đừng quên chia sẻ bài viết này để nhiều người hơn tìm thấy nó 🙂
Cảm ơn bạn đã đọc.