Ruby で nil と empty と blank を理解する方法 質問する

Ruby で nil と empty と blank を理解する方法 質問する

私は、 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?が返されます。この場合の空白を判断するには、を使用します。例:falseall?blank?

[ nil, '' ].blank? == false
[ nil, '' ].all? &:blank? == true 

おすすめ記事