Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> Ruby

Thành thạo phương thức Enumerable Ruby: Any, All, None & One

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.

Thành thạo phương thức Enumerable Ruby: Any, All, None & One

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.