今日はRubyのcompactについて勉強しました!
では早速調べていきましょう!
compactの英語の意味を調べる
まずは英語の意味を調べてみました!
compact:ぎっしり詰まった、圧縮する。小型車
こんな意味があるそうです。
つまり、なんか詰めたり、圧縮したりできるメソッドっぽいですね!
実際に使ってみた
compactは配列で利用できるメソッドです。
array1 = [1,2,3,4,5]
include_nil_array = [nil, nil,1,2,nil,3,nil,4]
p array1.compact
p array1
p include_nil_array.compact
p include_nil_array
p include_nil_array.compact!
p include_nil_array
実行結果
[1, 2, 3, 4, 5]
[1, 2, 3, 4, 5]
[1, 2, 3, 4]
[nil, nil, 1, 2, nil, 3, nil, 4]
[1, 2, 3, 4]
[1, 2, 3, 4]
nilのない配列に対して実行しても
変化はありませんでした。
nilの存在する配列に対して実行すると、
nilを削除した状態で配列が返ってきました。
さらに削除した配列の中身を見てみると、
また配列はもとの状態のままのため、
非破壊メソッドということがわかりました!
「!」を加えてcompact!を
利用すると破壊できました!
配列以外で使ってみたらどうなるか試してみた
string = "1,nil"
p string.compact
実行結果
undefined method `compact' for "1,nil":String (NoMethodError)
「Stringにそんなメソッドはないんやで!」
no_magic_number = 1
p no_magic_number.compact
実行結果
undefined method `compact' for 1:Integer (NoMethodError)
「Integerにそんなメソッドはないんやで!」
・・・はい、配列にしか使えません!
まとめ
- compactは詰めるという意味。
- 配列で使うメソッド。それ以外はエラー。
- nilを取り除いた配列を返してくれる。
- 非破壊メソッド。「!」を使うと破壊できる。
- nilのない配列に使っても値は変わらない。エラーも発生しない。
RubySilverに挑戦した
Ruby Silverに挑戦したお話はこちらからどうぞ。