パーフェクトRuby Advent Calendar 2013(13日目) 気になるあの子
パーフェクトRuby Advent Calendar 2013 の13日目の記事です。
12日目の記事は パーフェクトRubyから泣く泣く削った標準添付ライブラリ パーフェクトRuby Advent Calendar 2013(12日目) です。
今日は、私がパーフェクトRubyを読んで思ったこと、気付いたことを書きます。
あの子にこんな一面も
パーフェクトRubyは、Rubyの言語仕様から丁寧に書いてある本なので、普段仕事でRubyを使っている私は「最初の方はだいたい知っている事なはず」と思っていました。 でもおさらい的な気持ちで読むと、あれ、これ知らなかったぞ…ということに結構出くわします。
私が特に「へー!」と思ったのは ブロックの do…end
と {}
のちがいです。どちらを使っても同じだけど、複数行になるときは do…end
1行で書けるときは{}
と覚えていました。
でも結合の優先度がちがうんですね。
{}の方が強く結合する
p [1, 2, 3].map {|n| n * 2 } => [2, 4, 6] p [1, 2, 3].map do |n| n * 2 end => [1, 2, 3]
へー!
こういう知らなかったことに、たびたび出会えるのがとても嬉しいです。
あの子にこんな一面もあったんだ、と思う時のあの感じです。
身元が気になる
Moduleクラスっていうのを今まであまり意識していなかったのですが、なにげなく使っている attr_accessor
とか include
とかって Moduleクラスのメソッドなんですよね。パーフェクトRubyを読んでから「これModuleクラスのメソッド」って思うようになりました。
パーフェクトRuby読んで「そこ?」って感じかもですが、Object とか Kernel とかのメソッドもそうで、今まで気にせず使っていた子たちの身元が気になりだしました。
意識せず なにげなく使っていたものもあるし、もちろん新しく知ったメソッドもあります。 特に一覧を返す系のメソッドがすきです。
ancestors :祖先クラスとモジュールの一覧を返す
Class.ancestors #=> [Class, Module, Object, Kernel, BasicObject]
constants :定数名の一覧を返す
module IncludeModule MODULE_CONST_VAR = 1 end class Constants include IncludeModule CLASS_CONST_VAR = 1 end Constants.constants #=> [:CLASS_CONST_VAR, :MODULE_CONST_VAR]
とかとか。ふとした時に便利です。
前からObject#methods
もすきだったし、私は把握したいのかもしれないです。ちょっと高い位置から見渡したい。
そんな深層心理なのかもしれないです。
エピローグ
Rubyともっと仲良くなりたいと思いながら2年くらいやってきて、近づいたり、突き放されたり (被害妄想) しながら それでも少しずつ距離を縮めてきました。
パーフェクトRubyは たぶん私達の仲を取り持ってくれる存在だと思います。 これからもちょー頼りにしています。