[Rails] nil? empty? blank? present? any? all?の使い方

学習記録

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…

コメント

タイトルとURLをコピーしました