nil?
オブジェクトが「存在しない」という意味。空白の存在。
オブジェクトが存在しなければ、true
を返します。
[1] pry(main)> 1.nil?
=> false
[2] pry(main)> nil.nil?
=> true
[3] pry(main)> 0.nil?
=> false
[4] pry(main)> ''.nil?
=> false
[5] pry(main)> [].nil?
=> false
empty?
empty?はnilを判定できません。
そのオブジェクトが存在していることが前提で、中身が「空」か、文字列が「” “」のときにtrue
を返します。レシーバーがnil
だと、UndefinedMethodになってしまいます。
[1] pry(main)> [].empty?
=> true
[2] pry(main)> ''.empty?
=> true
[3] pry(main)> nil.empty? # nilを判定できない
NoMethodError: undefined method `empty?' for nil:NilClass
from (pry):7:in `<main>'
[4] pry(main)> nil.respond
NoMethodError: undefined method `respond' for nil:NilClass
from (pry):8:in `<main>'
[5] pry(main)> nil.respond_to? :empry? # nilにempty?メソッドがあるのか確認
=> false
blank?
blank? はnil?
とempty?
を合わせた判定ができます。中身が「空」なのか、またはオブジェクト自体が存在しないのか?の判定に使えます。
中身がnilのときと、「空」の時にtrue
を返します。
[1] pry(main)> [].blank?
=> true
[2] pry(main)> ''.blank?
=> true
[3] pry(main)> nil.blank? # nilを判定できる
=> true
[4] pry(main)> nil.respond_to? :blank? # nilにblank?メソッドがあるのか確認
=> true
present?
present?
は、!blank?
と同じ意味になります。nil
ではなく「空
」でもない、すなわちオブジェクトが存在する場合にtrue
を返します。
[1] pry(main)> [].present?
=> false
[2] pry(main)> ''.present?
=> false
[3] pry(main)> nil.present?
=> false
[4] pry(main)> nil.respond_to? :present? # nilにpresent?メソッドがあるのか確認
=> true
[5] pry(main)> 1.present?
=> true
any?
要素の中に1つでも真があればtrue
を返します。
すべての要素が偽である場合に false を返します。
また、ブロックを伴う場合は、各要素に対してブロックを評価し、すべての結果が偽である場合に false を返します。 ブロックが真を返した時点で、ただちに true を返します。
[1] pry(main)> [1, 2, 3].any? # 整数値はtrueなのでtrueが返る
=> true
[2] pry(main)> [0, nil, nil].any? # 整数値0が含まれるのでtrueが返る
=> true
[3] pry(main)> [nil, nil, false].any? # すべてがnil、falseのみなのでfalseが返る
=> false
ブロック引数を渡す場合
[1] pry(main)> [1, 2, 3].any? { |n| n.odd? } # 奇数1, 3が含まれるためtrue
=> true
[2] pry(main)> [2, 4, 6].any? { |n| n.odd? } # 全て偶数であるためfalse
=> false
all?
全ての要素が真である場合にtrueを返します。
要素の中に1つでも偽がある場合はfalseを返します。
[1] pry(main)> [1, 2, 3].all?
=> true
[2] pry(main)> [1, 2, nil].all?
=> false
参考記事
nil? empty? blank? present? の使い分け - Qiita
まず、nil?とempty?はrubyのメソッドで、blank?とpresent?はrailsで拡張されたメソッド(つまりrub…
コメント