LoginSignup
38
24

More than 3 years have passed since last update.

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

Last updated at Posted at 2019-11-12

はじめに

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)

38
24
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
38
24