初めてのRuby(続き)

「初めてのRuby」の残りを読んで,新たに知ったことなど.

ヒアドキュメント.Stringの%メソッドを合わせることで, 長い文字列もすっきり. 今まで何と無駄で読みにくいコードを書いていたのかと.

変数が保持するものは,オブジェクトへの参照.ラベル付け. どこからも参照されなくなるとGCのときに回収される?

nil/falseは偽であること, 変数は大体初期値がnilであること, 論理演算子が真偽値ではなくオペランドを返すことを利用して, 次のような初期化イディオムが使える.

  @instance_var ||= some_value

if/for/while/caseは値を返す制御文なので制御式と呼ばれる. ていうか値を返すのか.

some_var = if some_cond then
  value
else
  another_value
end

case制御式のためにcase比較演算子===がある.

catch/throwでネストしたループを脱出. 自分はたまに再帰で構文解析とかやるとC++の例外でほぼ同じような事を….

コードブロックをオブジェクトとして扱う. 確かにイテレータメソッドは幾度も使って慣れてきたけど, Procでコード片をオブジェクトにして渡し, あとで使うなどということを意識してやったことはなかった.

attr_accessorメソッドで属性定義が簡単にできる. 以下のように書くと,Studentクラスにname/student_idの getterとsetterが自動で定義される.

class Student
  attr_accessor :name, :student_id

  def to_s
    "#{@name}, \##{@student_id}"
  end
end

student = Student.new
student.name = "line"
student.student_id = "1234cs567"
puts student    #=> line, #1234cs567

特異メソッド,特異クラス,メタクラスの関係がまだ把握できていない. ここでいう「特異」は”singleton”と訳すと知った. singularかと思ってました.


About this entry