1. ホーム
  2. ruby-on-rails

[解決済み] Rubyでnilとemptyとblankを理解する方法

2022-03-17 03:26:36

質問

の違いについて、明確な定義を何度も探してしまいます。 nil? , blank? および empty? をRuby on Railsで作成しました。 これが最も近い例です。

  • blank? オブジェクトは、false、空、または空白の文字列です。例えば "" , " " , nil , [] および {} は空白です。

  • nil? オブジェクトはNilClassのインスタンスです。

  • empty? オブジェクトはクラス固有のものであり、その定義はクラスによって異なる。文字列は文字を持たなければ空であり、配列は項目を持たなければ空である。

何か足りないものや、もっと厳密な比較ができるものはないでしょうか?

解決方法は?

.nil? は任意のオブジェクトに対して使用でき、オブジェクトがnilの場合はtrueになります。

.empty? は、文字列、配列、ハッシュに対して使用でき、以下の場合に真を返します。

  • 文字列の長さ == 0
  • 配列の長さ == 0
  • ハッシュの長さ == 0

実行中 .empty? を投げます。 NoMethodError .

そこで .blank? が登場します。それは Railsで実装されている のように動作するだけでなく、あらゆるオブジェクトに対して操作することができます。 .empty? を文字列、配列、ハッシュの上に置くことができます。

nil.blank? == true
false.blank? == true
[].blank? == true
{}.blank? == true
"".blank? == true
5.blank? == false
0.blank? == false

.blank? は、空白文字だけを含む空でない文字列に対しても真と評価されます。

"  ".blank? == true
"  ".empty? == false

また、Rails は .present? の否定を返します。 .blank? .

配列のゴチャゴチャ。 blank? が返されます。 false すべての 要素 の配列は空白である。この場合、空白を判定するには all? と共に blank? は、例えば

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