Rubyには配列の評価を行い、全ての値が真の場合にtrueを返すall?メソッドがあます。
all?メソッドを使用すれば、配列の値を使用する前に配列の評価を行うことができます。
ここでは、そんなall?メソッドについて
【基礎】all?メソッドの基本的な使い方
【発展】ブロックの省略
【発展】if文との組み合わせ
などについて解説いたします。
all?メソッドは配列の評価を行うときに便利なメソッドですので、使い方はよく理解しておきましょう。
all?メソッドとは
all?メソッドは配列の要素を繰り返し実行し、ブロックの返り値が全て真の場合にtrueを返すメソッドです。
書き方:
オブジェクト.all? { |要素| ブロック処理}
たとえば、配列の中に指定した要素より大きい値が存在するかなど、条件に全て一致するか確認したい場合に使用します。
次の章よりall?メソッドの具体的な使い方について見ていきましょう。
all?メソッドの使い方
以下のサンプルプログラムでは、配列の中に10以上の値が存在するかを調べています。
サンプルプログラム:
array = [10, 20, 30, 40, 50] puts array.all? { |w| w > 10 }
実行結果:
false
このプログラムでは、all?メソッドを使用して、配列の中の値が全て10以上だったらtrueを返します。
しかし、配列の値は10以上ではない値も含まれているため、返り値はfalseを返しています。
all?メソッドは、ブロックの引数wに配列の要素を順番に格納しながら繰り返し「w > 10」の条件式を実行し、条件式が偽になった時点で処理を中断してfalseを返します。
以下のサンプルは、ブロック処理の結果が全て真となるのでtrueを返します。
サンプルプログラム:
array = [20, 20, 30, 40, 50] puts array.all? { |w| w > 10 }
実行結果:
true
以下の例では配列の要素が全て文字列か調べています。
サンプルプログラム:
fruits = ["apple", "orange", "melon", "strawberry", "banana", "pineapple"] puts fruits.all? { |w| w.kind_of?(String) }
実行結果:
true
配列の値は全て文字列なのでtrueを返しました!
ブロックの省略
all?メソッドはブロックを省略した場合は、要素の中の値が全て真ならtrueを返します。
サンプルプログラム:
array1 = [true, true, true] array2 = ["apple", "orange", "melon", "strawberry", "banana", "pineapple"] puts array1.all? puts array2.all?
実行結果:
true true
このようにブロックを省略した場合は、配列の中に値が全て存在する場合や全てtrueの場合にtrueを返します。
if文との組み合わせ
all?メソッドは条件に一致した要素が全て存在するか?などの配列の要素チェックが可能なため、
if文と組み合わせて、配列の中身をあらかじめチェックしたい場合に使用すると便利です。
サンプルプログラム:
array1 = [100, 200, 300, 400, 500] array2 = [true, false, true] array3 = [10, 20, 30, 40, 50] if array1.all? puts "array1 OK!" else puts "array1 NG" end if array2.all? puts "array2 OK!" else puts "array2 NG" end if array3.all? { |w| w > 30 } puts "array3 OK!" else puts "array3 NG" end
実行結果:
array1 OK! array2 NG array3 NG
配列のどれかが一致するか確認する場合
allメソッドは配列の要素が全てブロックの条件に一致した場合にtrueを返しますが、配列の要素のうち、どれかが一致した場合にtrueを返したい場合はany?メソッドを使用します。
any?メソッドについては、以下の記事で詳しく解説しています!
まとめ
ここではall?メソッドについて、
- all?メソッドとは
- all?メソッドの基本的な使い方
- ブロック処理を省略する使い方
- if文との組み合わせ方法
などについて解説しました。
all?メソッドを使用すれば、配列を使用する前に配列の評価を行うことができますので、その後起こりうるエラーを回避することができます。
もし、all?メソッドの使い方を忘れてしまったら、この記事を思い出してくださいね!