私は、 Ruby on Rails の、、およびnil?
の違いの明確な定義を何度も探していました。私が見つけた最も近いものは次のとおりです。blank?
empty?
blank?
オブジェクトは false、空、または空白文字列です。たとえば、、、、、""
は" "
空白nil
です。[]
{}
nil?
オブジェクトは NilClass のインスタンスです。empty?
オブジェクトはクラス固有であり、定義はクラスごとに異なります。文字列は文字が含まれていない場合は空であり、配列は項目が含まれていない場合は空です。
何か欠けているものはありますか、あるいはより厳密な比較ができるでしょうか?
ベストアンサー1
.nil?
任意のオブジェクトに使用でき、オブジェクトが nil の場合は true になります。
.empty?
文字列、配列、ハッシュに使用でき、次の場合に true を返します。
- 文字列の長さ == 0
- 配列の長さ == 0
- ハッシュ長 == 0
.empty?
nil に対して実行すると、 がスローされます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?
。
配列の落とし穴:配列のすべての要素が空の場合でもblank?
が返されます。この場合の空白を判断するには、を使用します。例:false
all?
blank?
[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true