0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

【Rails】compact / compact_blank / empty? の違い

Posted at

はじめに

こんにちは。アメリカ在住で独学エンジニアを目指している Taira です。

Rails を触っているとよく目にする compact / compact_blank / empty?。似ているようで役割が違うので、整理してまとめました。


🔹 1. compact(Ruby 標準)

  • nil だけを取り除く
  • Ruby 標準メソッド(Array, Hash)
[1, nil, 2, "", [], false].compact
# => [1, 2, "", [], false]

👉 空文字や空配列は残ります。


🔹 2. compact_blank(Rails 拡張)

  • blank? が true のものを取り除く
  • Rails が Array/Hash に追加した便利メソッド
  • blank? とは? → nil, 空文字 "", 空白文字列 " ", 空配列 [], 空ハッシュ {} などを判定
[1, nil, 2, "", [], false].compact_blank
# => [1, 2, false]

{ a: nil, b: "", c: [], d: "ok" }.compact_blank
# => { d: "ok" }

👉 falseblank? ではないので残ります。


🔹 3. empty?(Ruby 標準)

  • 単一オブジェクトに対して「中身が空かどうか」を判定
  • 真偽値を返す (true/false)
"".empty?   # => true
[].empty?   # => true
{}.empty?   # => true

[1].empty?  # => false
"hi".empty? # => false

👉 配列や文字列が「空かどうか」を確認するだけで、中の要素を削除はしません。


✅ 違いまとめ表

メソッド 適用対象 動作 返り値
compact Array / Hash nil を削除 新しい配列/ハッシュ
compact_blank Array / Hash blank? == true を削除 新しい配列/ハッシュ
empty? 単一オブジェクト 中身が空かどうかを判定 true / false

💡 使い分けの目安

  • nil だけ消したいcompact
  • 空文字・空配列も一緒に消したいcompact_blank
  • オブジェクトが空か判定したいempty?

実務での例

  • フォーム入力の params の掃除params.compact_blank
  • 入力チェックvalue.empty? や Rails なら value.blank?
0
0
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?