Hôm nay bạn sẽ học 4 phương thức Enumerable giúp kiểm tra câu lệnh điều kiện trên mảng phần tử, hash, hoặc object nào include module Enumerable.

4 phương thức này trả về true hoặc false.
Nội dung
- 1 Ruby All Method
- 2 All & Empty Arrays
- 3 Ruby None Method
- 4 Ruby Any Method
- 5 Ruby One Method
- 6 Tính năng Ruby 2.5 mới
- 7 Tóm tắt
- 7.1 Related
Bắt đầu nào!
Ruby All Method
Nếu muốn kiểm tra tất cả string trong mảng có kích thước cụ thể.
Bạn có thể làm:
def all_words_have_specific_size?(words)
return false if words.empty?
words.each do |str|
return false unless str.size == 5
end
true
end
words = ["bacon", "orange", "apple"]
all_words_have_specific_size?(words) # false
Chúng ta check mỗi string, nếu size không đúng trả false, ngược lại trả true cuối.
Đó là nhiều code cho việc đơn giản.
Tưởng tượng phải setup mỗi lần muốn check kiểu này.
Đó là nhiều việc!
Chúng ta chỉ quan tâm đến:
str.size == 5
Đó là điều kiện chúng ta check.
Có cách tốt hơn không?
Có!
Dùng phương thức all? làm việc khó cho bạn.
Cách làm:
strings.all? { |str| str.size == 5 }
Chỉ thế thôi.
All & Empty Arrays
Một điều bạn phải biết:
Phương thức all? này trả về true nếu gọi trên mảng rỗng.
Ví dụ:
[].all? { |s| s.size == 1 } # true
Giải thích:
Vì KHÔNG element nào là false nên tất cả element phải là true.
Đó là logic đằng sau.
Ruby None Method
Nếu muốn ngược của all?, dùng none?
Ví dụ:
strings.none? { |str| str.size == 5 }
Này trả true nếu không string nào match điều kiện, hoặc false nếu một hoặc nhiều match.
Giống unless cho if statement.
Ruby Any Method
Muốn biết CÓ element nào match điều kiện không?
Dùng phương thức any?!
Như sau:
[1,2,3,4,5].any? # true
Trong ví dụ cụ thể này, any? hoạt động như nghịch đảo của empty?. Nhưng không phải mọi trường hợp.
Vì nó đang hỏi:
"Có element TRUTHY nào trong mảng không?"
Nếu mảng chỉ chứa giá trị non-truthy (nil/false) bạn nhận false, nhưng mảng không thực sự rỗng.
Ví dụ:
[nil].any? # false
Bạn cũng có thể truyền block:
[1,2,3].any? { |n| n > 0 } # true
Này check n > 0 là true cho ÍT NHẤT một element.
Ruby One Method
Bạn check CHÍNH XÁC một element trả true với phương thức one?.
Ví dụ:
["a", 1, {}].one? { |obj| obj.kind_of?(Hash) } # true
Bạn dùng không block để check mảng có chính xác một giá trị truthy (bất cứ thứ gì trừ false / nil).
["a"].one? # true [].one? # false [nil].one? # false
Tôi sẽ dùng size == 1 vì rõ ràng hơn. Mọi người hiểu ngay cả không quen one?, phương thức không phổ biến lắm.
Tính năng Ruby 2.5 mới
Từ Ruby 2.5, 4 phương thức này (any? / all? / none? / one?) cũng nhận đối số hoạt động như argument của grep.
Ý tôi là:
[:orange, :apple, :coconut].any?(Symbol) # true [1,2,3].all?(1..10) # true
Đây là shortcut hay nếu muốn check class, regex hoặc range.
Tóm tắt
Bạn đã học 4 phương thức Ruby tuyệt vời giúp tiết kiệm nhiều công sức! Các phương thức chỉ trả true hoặc false.
Nếu chưa dùng các phương thức này… tại sao không thử ngay?
Hãy chia sẻ bài viết nếu thấy hữu ích.