Hôm nay, bạn sẽ tìm hiểu về 4 phương thức Enumerable sẽ giúp bạn kiểm tra một câu lệnh điều kiện dựa trên một mảng các phần tử, một hàm băm hoặc bất kỳ đối tượng nào khác bao gồm mô-đun Enumerable.
4 phương thức này trả về true
hoặc false
.
Nội dung
- 1 Ruby All Method
- 2 Mảng Tất cả &Mảng trống
- 3 Ruby None Method
- 4 Ruby Any Method
- 5 Phương pháp Ruby One
- 6 Tính năng mới của Ruby 2.5
- 7 Tóm tắt
- 7.1 Có liên quan
Hãy làm điều này!
Ruby All Method
Nếu bạn muốn kiểm tra xem tất cả các chuỗi bên trong một mảng có kích thước cụ thể hay không.
Bạn có thể làm điều này :
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 tôi kiểm tra mọi chuỗi, nếu kích thước không như chúng tôi muốn, chúng tôi trả về false
, nếu không, chúng tôi trả về true
ở phần cuối.
Đó là rất nhiều mã cho một cái gì đó như thế này.
Hãy tưởng tượng bạn phải thiết lập điều này mọi lúc bạn muốn thực hiện loại kiểm tra này.
Còn rất nhiều việc!
Điều duy nhất chúng tôi quan tâm ở đây là:
str.size == 5
Đó là điều kiện chúng tôi đang kiểm tra .
Có cách nào tốt hơn để làm điều này không?
Vâng!
Sử dụng all?
phương pháp để làm tất cả công việc khó khăn cho bạn.
Đây là cách thực hiện :
strings.all? { |str| str.size == 5 }
Thế là xong.
Tất cả &Mảng trống
Một điều bạn phải biết:
all?
phương thức sẽ trả về true
nếu bạn gọi nó trên một mảng trống.
Ví dụ :
[].all? { |s| s.size == 1 } # true
Giải thích :
Vì KHÔNG có phần tử nào là false
thì tất cả các phần tử phải là true
.
Đó là logic đằng sau điều này.
Ruby None Method
Nếu bạn muốn đảo ngược all?
, sử dụng none?
Đây là một ví dụ :
strings.none? { |str| str.size == 5 }
Điều này trả về true
nếu không có chuỗi nào phù hợp với điều kiện hoặc false
nếu một hoặc nhiều đối sánh với nó.
Nó giống như trừ khi câu lệnh if.
Ruby Any Method
Bạn có muốn biết liệu BẤT KỲ phần tử nào phù hợp với điều kiện của bạn không?
Bạn có thể sử dụng any?
phương pháp!
Như thế này :
[1,2,3,4,5].any? # true
Trong ví dụ cụ thể này, any?
hoạt động giống như nghịch đảo của empty?
. Nhưng điều đó sẽ không hiệu quả với mọi tình huống.
Vì đây là câu hỏi đặt ra :
“Có bất kỳ phần tử THẬT nào bên trong mảng này không?”
Nếu mảng của bạn chỉ bao gồm không trung thực (nil
/ false
) các giá trị bạn sẽ nhận được false
, nhưng mảng không thực sự trống.
Ví dụ :
[nil].any? # false
Bạn cũng có thể chuyển một khối cho phương thức này:
[1,2,3].any? { |n| n > 0 } # true
Điều này sẽ kiểm tra xem n > 0
là true
cho ÍT NHẤT một phần tử.
Phương pháp Ruby One
Bạn có thể kiểm tra xem CHÍNH XÁC một phần tử trả về true
hay không với one?
phương pháp.
Đây là một ví dụ :
["a", 1, {}].one? { |obj| obj.kind_of?(Hash) } # true
Bạn có thể sử dụng điều này mà không cần khối để kiểm tra xem mảng có chứa chính xác một giá trị trung thực hay không (bất kỳ giá trị nào ngoại trừ false
/ nil
).
["a"].one? # true [].one? # false [nil].one? # false
Tôi sẽ gắn bó với size == 1
bởi vì nó rõ ràng hơn. Mọi người sẽ hiểu điều đó ngay cả khi họ không quen thuộc với one?
phương pháp này không phổ biến.
Tính năng Ruby 2.5 mới
Kể từ Ruby 2.5, 4 phương thức này (any?
/ all?
/ none?
/ one?
) cũng có một đối số hoạt động giống như đối số của grep.
Đây là ý của tôi :
[:orange, :apple, :coconut].any?(Symbol) # true [1,2,3].all?(1..10) # true
Đây là một phím tắt nhỏ hay nếu bạn muốn kiểm tra một lớp, biểu thức chính quy hoặc một phạm vi.
Tóm tắt
Bạn đã học về 4 phương pháp Ruby tuyệt vời có thể giúp bạn tiết kiệm rất nhiều công việc! Các phương thức này chỉ trả về true
hoặc false
.
Nếu bạn chưa sử dụng các phương pháp này trước đây… tại sao không thử ngay bây giờ?
Hãy chia sẻ bài viết này nếu bạn thấy nó hữu ích.