Help us understand the problem. What is going on with this article?

【Ruby】`all?`と類似メソッドまとめ

はじめに

Rubyで繰り返し処理を使って条件を満たしているかどうかを確認したいことって多くないでしょうか。

今回はそのメソッドのうちの一つall?とその類似メソッドについてまとめています。

この記事が役に立つ方

  • 繰り返し処理はついeachばかりを使ってしまう
  • 条件を満たしているかどうかはifばかり使ってしまう
  • Ruby初心者

この記事のメリット

  • all?が使えるようになる
  • 繰り返し処理の引き出しが増える

環境

  • Ruby 2.6.3

all?メソッドとは?

公式リファレンスによると、

すべての要素が真である場合に true を返します。 偽である要素があれば、ただちに false を返します。
ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果 が真である場合に true を返します。ブロックが偽を返した時点で、 ただちに false を返します。

基本構文

all? {|item| ... } -> bool # ブロックを使う場合
all?(pattern) -> bool # パターンを指定する場合

では、以下の例で実際の動きを見てみましょう。

挙動と類似メソッド

前提

以下のような配列array1array2empty_arrayを定義します。

array1 = [1, 2, 3, 4, 5]
array2 = [-1, 0, 1, 2, 3]
empty_array = [] # 空の配列

この3つの配列について、それぞれメソッドと条件を変えながら挙動をみていきましょう。


all? 全てが真か?

条件:全てが正の数か?

empty_arraytrueが返されることに注意です。

array1.all?{ |n| n > 0 }
=> true

array2.all?{ |n| n > 0 }
=> false

empty_array.all?{ |n| n > 0 }
=> true

none? 全てが偽か?

条件:すべてが3以上「でない」か?(3以下か)

all?のときと同様、empty_arraytrueが返されます。

array1.none?{ |n| n > 3 }
=> false

array2.none?{ |n| n > 3 }
=> true

empty_array.none?{ |n| n > 3 }
=> true

any? 1つでも真か?

条件:1つでも0以下か?

empty_arrayfalseが返されます。

array1.any?{ |n| n < 0}
=> false

array2.any?{ |n| n < 0}
=> true

empty_array.any?{ |n| n < 0 }
=> false

one? 1つだけ真か?

条件:1つだけ0以下か?

empty_arrayfalseが返されます。

array1.one?{ |n| n < 0}
=> false

array2.one?{ |n| n < 0}
=> true

empty_array.one?{ |n| n < 0 }
=> false

おわりに

empty_arraytruefalseの理由がなぜなのか、イマイチ理解しきれませんでした。

もし中のロジックが分かる方がいらっしゃいましたら教えて頂きたいです。:bow_tone1:

とりあえず、そういうものと捉えています。:sweat_smile:

【2019/11/13 追記】

@scivolaさんにコメント頂き、無事解決しました!
いつもありがとうございます。:relaxed:

参考にさせて頂いたサイト(いつもありがとうございます)

module Enumerable (Ruby 2.6.0)
instance method Enumerable#all? (Ruby 2.6.0)

Why do not you register as a user and use Qiita more conveniently?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away