[解決済み] Rubyでnilとemptyとblankを理解する方法
質問
の違いについて、明確な定義を何度も探してしまいます。
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
関連
-
[解決済み】Ruby: 特定のバージョンのruby gemをインストールする方法は?
-
[解決済み] Rubyのswitch文の書き方
-
[解決済み] Ruby on Railsのマイグレーションでデータベースのカラムの名前を変更するにはどうすればよいですか?
-
[解決済み] Rubyで配列に値が存在するかどうかを確認する方法
-
[解決済み] Rubyからシェルコマンドを呼び出す方法
-
[解決済み] Rubyで文字列を小文字・大文字に変換する方法
-
[解決済み] Rubyのattr_accessorとは何ですか?
-
[解決済み] Ruby on Railsで現在の絶対URLを取得するにはどうすればよいですか?
-
[解決済み] Rubyで乱数を取得する方法
-
[解決済み】RubyにあってPythonにないもの、またその逆は何ですか?
最新
-
nginxです。[emerg] 0.0.0.0:80 への bind() に失敗しました (98: アドレスは既に使用中です)
-
htmlページでギリシャ文字を使うには
-
ピュアhtml+cssでの要素読み込み効果
-
純粋なhtml + cssで五輪を実現するサンプルコード
-
ナビゲーションバー・ドロップダウンメニューのHTML+CSSサンプルコード
-
タイピング効果を実現するピュアhtml+css
-
htmlの選択ボックスのプレースホルダー作成に関する質問
-
html css3 伸縮しない 画像表示効果
-
トップナビゲーションバーメニュー作成用HTML+CSS
-
html+css 実装 サイバーパンク風ボタン
おすすめ
-
[解決済み] RailsのRootディレクトリのパス?
-
[解決済み] Railsマイグレーションを利用してカラムをドロップする方法
-
[解決済み] Railsで `before_action` での `only:` はどのように機能するのですか?
-
[解決済み] RVMでRubyのデフォルトバージョンを設定するには?
-
[解決済み] Ruby: public static メソッドを作るには?
-
[解決済み] Devise Admin Roleの追加【終了しました
-
[解決済み] 属性を割り当てる場合、引数としてハッシュを渡す必要がある
-
[解決済み] 構文エラー "構文エラー、予期しない入力終了、keyword_endを期待 (SyntaxError)"
-
[解決済み] RSpecとCucumberの違いは何ですか?[クローズド]
-
[解決済み] Rubyで.exists?と.present?を使うことの違いは何ですか?