私はRuby on Railsのnil?
、blank?
、およびempty?
の違いの明確な定義を繰り返し探しています。これが私が一番近づいたものです:
blank?
オブジェクトはfalse、空、または空白文字列です。たとえば、""
、" "
、nil
、[]
、および{}
は空白です。
nil?
オブジェクトはNilClassのインスタンスです。
empty?
オブジェクトはクラス固有のもので、定義はクラスによって異なります。文字列に文字が含まれていない場合は文字列が空になり、項目が含まれていない場合は配列が空になります。
不足しているもの、または比較できる厳密な比較はありますか?
.nil?
はどのオブジェクトにも使用でき、オブジェクトがnilであれば真です。
.empty?
は文字列、配列、ハッシュで使用でき、以下の場合にtrueを返します。
Nilであるものに対して.empty?
を実行すると、NoMethodError
がスローされます。
それが.blank?
が登場するところです。それは Railsによって実装されます であり、文字列、配列、ハッシュに対して.empty?
のように動作します。
nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false
.blank?
は、空ではないが空白しか含まない文字列に対してもtrueを評価します。
" ".blank? == true
" ".empty? == false
Railsも提供.present?
は、.blank?
の否定を返します。
配列gotcha:blank?
は、配列のすべての 要素 が空白の場合でもfalse
を返します。この場合、空白かどうかを判断するには、以下のようにall?
とblank?
を使用します。
[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true
私はすべてのケースでこの便利な表を作りました:
blank?
、present?
はRailsによって提供されています。
クイックヒント:!obj.blank? == obj.present?
いくつかの表現で目に便利/簡単になることができます
1つの違いは、.nil?
と.empty?
はプログラミング言語Rubyによって提供されるメソッドであるのに対して、.blank?
はWeb開発フレームワークRailsによって added になっていることです。
特別な場合は、ブール値がnilであるかどうかを評価しようとしているときです。
false.present? == false
false.blank? == true
false.nil? == false
この場合、推奨は.nil?
を使用することです。
any?
の勧告についてのちょっとしたメモ:彼はそれが 一般に !empty?
と同等であるというのは正しいです。しかし、any?
はtrue
をちょうど空白の文字列に返します(ala " "
)。
そしてもちろん、上の1.9コメントも見てください。
一般的にany?
である!empty?
を忘れないでください。 Railsでは、if something
またはunless something
を使ってステートメントの最後に何かがあるかどうかをチェックしてから、必要に応じてblank?
を使用します。
nil?
は、すべてのオブジェクトに対して呼び出せる標準のRubyメソッドで、オブジェクトがtrue
の場合はnil
を返します。
b = nil
b.nil? # => true
empty?
は標準のRubyメソッドで、Strings、Arrays、Hashesなどの一部のオブジェクトで呼び出すことができ、これらのオブジェクトに要素が含まれていない場合はtrue
が返されます。
a = []
a.empty? # => true
b = ["2","4"]
b.empty? # => false
nil
オブジェクトに対してempty?
を呼び出すことはできません。
blank?
は、空のオブジェクトだけでなくnil
オブジェクトに対しても呼び出すことができるRailsメソッドです。
他の誰もが違いが何であるかをよく説明しました。
Ruby on Railsを追加したいのですが、obj.blank?
またはobj.present?
の代わりにobj.nil?
またはobj.empty?
を使用することをお勧めします。
obj.blank?
はすべての型nil
、''
、[]
、{}
を処理し、値が利用できない場合はtrue
を返し、任意の型のオブジェクトで値が利用できる場合はfalse
を返します。
exists?
メソッドを使用して、データがデータベースに存在するかどうかを確認できます。 true
またはfalse
のいずれかのブール値を返します。
レール4
@ corban-brookの に代わるもの - 'Array gotcha:blank?' 配列が空の値のみを保持し、空白と見なすことができるかどうかをチェックするための?本当:
[ nil, '' ].all? &:blank? == true
次のようなこともできます。
[nil, '', "", " ",' '].reject(&:blank?).blank? == true
nil?
はどのオブジェクトにも使用できます。オブジェクトが何らかの値を持っているかどうかを決定します( '空白'値を含む)。
例えば:
example = nil
example.nil? # true
"".nil? # false
基本的にnil?
はオブジェクトが実際には 'nil'と等しい場合にのみ真を返します。
empty?
は、コレクションと見なされるオブジェクトに対してのみ呼び出されます。これには、文字列(文字の集まり)、ハッシュ(キーと値のペアの集まり)、配列(任意のオブジェクトの集まり)などが含まれます。 empty?
はコレクションにアイテムがない場合にtrueを返します。
例えば:
"".empty? # true
"hi".empty? # false
{}.empty? # true
{"" => ""}.empty? # false
[].empty? # true
[nil].empty? # false
nil.empty? # NoMethodError: undefined method `empty?' for nil:NilClass
Nilオブジェクトはコレクションではないため、empty?
をnilオブジェクトに対して呼び出すことはできず、例外が発生します。
また、コレクション内の項目が空白の場合でも、コレクションが空であることを意味するわけではありません。
blank?
は基本的にnil?
とempty?
の組み合わせです。コレクションがコレクションであると想定しているオブジェクトをチェックするのに役立ちますが、nilでも構いません。