パーフェクトRubyを読んだら俺Rubyのことわかってなかったなと…

結婚式のときにとちさんからお祝いで頂いていたパーフェクトRubyですが、パラパラとめくりながら時々読んでいたのですが、ちゃんと読んでみようと思って読んでみると、俺Rubyのことわかってなかったと痛感した。

特に、Enumerableのところでした。配列とハッシュは頻繁に使うのですが、each, map, inject, find, selectとかをよく使っていたのですが、さらに色々便利なメソッドがあるのだなー…。便利じゃないか?と思ったメソッド群はこちら。

array = [2,2,3,4,4,5]
array.select {|n| n.even? } # => [2, 2, 4, 4]
array.reject {|n| n.even? } # => [3, 5]

逆もできたんだな!と(まぁ条件を逆にすればいいだけではあるけど)。

%w(Alice Bob Charlie).grep(/a/i) # => ["Alice", "Charlie"]
["a", "b", 1, 2].grep(String) # => ["a", "b"]

今までselect内で正規表現チェックしていた気がする。

array = ["a", "b", "c", "d", "e"]
array.take(3) # => ["a", "b", "c"]
array.drop(3) # => ["d", "e"]

array.slice(0..2)ってやってた。まぁどっちでもできるんだけれど。
dropはいいですね。

array = [1, 2, 3, 4, 5]
array.take_while {|n| n < 3 } # => [1, 2]
array.drop_while {|n| n < 3 } # => [3, 4, 5]

今のところあんまり使う機会はなさそうだけれど。

array = [1, 2, 3, 1.0, 2.0, 3.0, "a", "b", "c"]
array.group_by {|v| v.class } # => {Fixnum=>[1, 2, 3], Float=>[1.0, 2.0, 3.0], String=>["a", "b", "c"]}

これはコードレビューで見たことあった。使ったことはない。

array = [1, 2, 3, 4, 5]
array.partition {|n| n.even? } # => [[2, 4],[1, 3, 5]]

selectとrejectを同時にできるのはいいなと思った。

array = [1, 2, 3, 4, 5]
array.min # => 1
array.max # => 5
array.minmax # => [1, 5]

minとmaxは知っていたけれど、minmaxは知らなかった!

array = ["a", "bb", "ccc"]
array.min_by {|n| n.length } # => "a"
array.max_by {|n| n.length } # => "ccc"
array.minmax_by {|n| n.length } # => ["a", "ccc"]

min_byとかあったんだなー…。

パーフェクトRubyは、正直俺はまだまだRubyとRailsの上辺だけを使っていたのだなと考えさせられる本でした。もっとRubyを使いこなせるようになりたい!と思ったので、Rubyもっと書きます。Rakeとかもっとちゃんと活用したい。gemを自分で書いていきたい。

パーフェクトRuby

パーフェクトRuby
著者:Rubyサポーターズ
価格:3,456円(税込、送料込)
楽天ブックスで詳細を見る


タグ Ruby | パーマリンク.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です