Ruby on Rails における nil v. empty v. blank の簡潔な説明
Ruby on Railsにおけるnil?
, blank?
, empty?
の違いについて、明確な定義を何度も探してしまいます。 これが、私がたどり着いた最も近いものです。
-
blank?
オブジェクトは、偽、空、または空白の文字列です。例えば、""
," "
,nil
,[]
,{}
は空白です。 -
nil?
オブジェクトは NilClass のインスタンスです。 -
empty?
オブジェクトはクラス固有のもので、その定義はクラスごとに異なります。文字列は文字がなければ空であり、配列はアイテムがなければ空です。
何か足りないものや、より厳密な比較ができるものはありますか?
1093
3
.nil?`は任意のオブジェクトに使用することができ、オブジェクトがnilの場合はtrueになります。
.empty?
は、文字列、配列、ハッシュに使用でき、以下の場合に真を返します。nilであるものに対して
.empty?
を実行すると、NoMethodError
が発生します。そこで登場するのが
.blank?
です。これはRailsで実装されているもので、文字列、配列、ハッシュに対して.empty?
のように動作するだけでなく、任意のオブジェクトに対しても動作します。.blank?`は、空ではないがホワイトスペースのみを含む文字列に対してもtrueを評価します。
Railsには、
.blank?
の否定を返す.present?
もあります。Array gotcha:
blank?
は、配列のすべての要素が空白であってもfalse
を返します。このような場合に空白を判定するには、例えばall?
をblank?
と一緒に使います。ひとつの違いは、
.nil?
や.empty?
がプログラミング言語Rubyで提供されているメソッドであるのに対し、.blank?
はWeb開発フレームワークRailsで提供されているもの追加であることです。一般的には
!empty?
であるany?
もお忘れなく。Railsでは通常、文の最後に何かがあるかどうかをif something
やunless something
でチェックし、必要に応じてblank?
を使用します(どこでも使えるようです)。