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

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

More than 1 year has passed since last update.

はじめに

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)

terufumi1122
ストックついでに「いいね!」もしてもらえると嬉しいです。 HTML/CSS/JavaScript/Vue.js/Ruby/Ruby on Rails/Java/Kotlin/Android
Why not register and get more from Qiita?
  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