arait-code’s RC

もうすぐエンジニア転職して2年になります。

rubyのcompact!を使うときに覚えておきたいこと

compact!とは

compact は自身から nil を取り除いた配列を生成して返します。 compact! は自身から破壊的に nil を取り除き、変更が行われた場合は self を、そうでなければ nil を返します。

docs.ruby-lang.org

compact! はArrayに nil が含まれるかどうかで戻り値の型が変わるので

# compact!
irb(main):007:0> [1,2,3,nil].compact!
=> [1, 2, 3]
irb(main):008:0> [1,2,3].compact!
=> nil

# compact
irb(main):009:0> [1,2,3,nil].compact
=> [1, 2, 3]
irb(main):010:0> [1,2,3].compact
=> [1, 2, 3]

メソッドチェーンする場合は compact を使った方が事故がない。