Rubyの`Array#compact`メソッドは、配列から`nil`の値を削除しますが、`false`やその他の偽(falsy)値に対してはどうなるのでしょうか?この記事では、`compact`メソッドの動作とその制限について解説します。
Array#compactメソッドの基本的な動作
`Array#compact`は、配列内の`nil`を削除した新しい配列を返します。このメソッドは元の配列を変更せず、新しい配列を生成します。
例えば、以下のような配列があった場合。
array = [1, nil, 3, nil, 5]
`array.compact`を実行すると、`nil`の要素だけが削除された配列が返されます。
array.compact # => [1, 3, 5]
偽(false)値は削除されるのか?
`Array#compact`は、`nil`だけを削除します。`false`などの偽(falsy)値は削除されません。
例えば、以下のような配列を考えます。
array = [1, false, 3, nil, 5]
この場合、`false`は削除されません。
array.compact # => [1, false, 3, 5]
この動作は、Rubyが`false`を`nil`とは異なるものとして扱っているためです。
nilとfalseの違い
Rubyでは、`nil`と`false`はどちらも「偽値」として扱われますが、異なるものです。`nil`はオブジェクトが存在しないことを示す特別な値であり、`false`は論理的な偽を示すための値です。
そのため、`Array#compact`は`nil`を削除しますが、`false`は削除しません。もし、`false`を含む要素も削除したい場合は、`reject`メソッドなどを使う方法があります。
偽値を削除したい場合の方法
`false`を削除したい場合、以下のように`reject`メソッドを使用できます。
array.reject { |item| item.nil? || item == false } # => [1, 3, 5]
この方法で、`nil`や`false`を取り除いた配列を得ることができます。
まとめ
Rubyの`Array#compact`メソッドは、`nil`のみを削除します。`false`などの偽値は削除されません。偽値も削除したい場合は、`reject`メソッドを使って条件に基づいて要素を除外することができます。`compact`の動作を理解し、必要に応じて他のメソッドを組み合わせて使用しましょう。


コメント