パーフェクトRuby 読書録
コーディングスタイル
有名どころは3つらしい
ローカル変数かメソッドか
紛らわしい例。これは以前とあるコミュティーでも質問が出た件。
アクセッサを利用しているつもりがそうならない例。
以来 @val のように明示的にインスタンス変数として参照しているが、最近呼んだ本では、あまり良くない例とされている。クラス内部のメソッドからでも隠蔽したほうが良いのか?
> irb --simple-prompt >> class Hoge >> attr_accessor :val >> def test >> val >> end >> def test=(v) >> val = v >> end >> end => :test= >> h = Hoge.new => #<Hoge:0x3312060> >> h.val = 10 => 10 >> h.val => 10 >> h.test => 10 >> h.test=(20) => 20 >> h.test => 10 >> h.test = 30 => 30 >> h.val => 10 >>
Fixnum の object_id は数値そのもの?
試してみる
>> '%x' % 0x1000.object_id => "2001" >> '%x' % 0x10000.object_id => "20001" >> '%x' % 0x100000.object_id => "200001" >> '%x' % 0x1000000.object_id => "2000001" >> '%x' % 0x10000000.object_id => "20000001" >> '%x' % 0x100000000.object_id => "186e94c"
確かにそうなっている模様。0x1000000 の次がFixnumとBignumとの境目。
組み込み変数 __dir__
2.0以降で追加された __dir__ だが、便利かも?
*****@*****-PC C:\usr\sandbox > type test.rb puts $0 puts __FILE__ puts __dir__ *****@*****-PC C:\usr\sandbox > ruby test.rb test.rb test.rb C:/usr/sandbox
制御構造
- begin .. end while
は do while の動作 - for v in x の v は for以降でも参照可能(スコープの変化なし)
- 大域ジャンプは catch / throw
- begin / rescue / else / ensure ensure 以外は値を返せる