はじめに

今日は、rubyのArrayオブジェクトからtrue,falseのboolean型を返す、メソッド群を紹介します。

メソッド紹介

・ all?

全ての要素が(ブロックに対して)trueであるか

numbers = [1,2,3,4,5]
p numbers.all?{|number| number.even?}   // => false

booleans = [false,true,false,false,false]
p booleans.all?                           // => false

blank = []
p blank.all?{|number| number.even?}       // =>  true
p blank.all?                              // =>  true

・ none?

全ての要素が(ブロックに対して)falseであるか

numbers = [1,2,3,4,5]
p numbers.none?{|number| number.even?}   // => false

booleans = [false,true,false,false,false]
p booleans.none?                           // => false

blank = []
p blank.none?{|number| number.even?}       // =>  true
p blank.none?                              // =>  true

・ any?

(ブロックに対して)trueである要素が1つ以上存在するか

numbers = [1,2,3,4,5]
p numbers.any?{|number| number.even?}   // => true

booleans = [false,true,false,false,false]
p booleans.any?                           // => true

blank = []
p blank.any?{|number| number.even?}       // =>  false
p blank.any?                              // =>  false

・ one?

(ブロックに対して)trueである要素が1つ存在するか

numbers = [1,2,3,4,5]
p numbers.one?{|number| number.even?}   // => false

booleans = [false,true,false,false,false]
p booleans.one?                           // => true

blank = []
p blank.one?{|number| number.even?}       // =>  false
p blank.one?                              // =>  false

使用例

numbers = [1,nil,3,4,5]
unless numbers.all?
  puts "alert, numbers contain nil"
  numbers = []
end
p numbers
万が一でも、nilが混じってしまったらそんな配列は使い物にならない!
なんて時に、こういう分岐処理を書くと綺麗になりそうですね。

まとめ

空の配列については、存在を確かめる one?any?trueを返し、必ず全ての要素を参照する all?any?falseを返すようです。要注意ですね。

他にも弊社では様々な知見を紹介していますので、是非見て行ってください。
ルーターのブログたち