ヤマカサのプログラミング勉強日記

プログラミングに関する日記とどうでもよい雑記からなるブログです。

プロを目指す人のためのRuby入門 その12

第7章 クラスの作成を理解する

定数

定数の再代入や変更を防ぐために、freeze メソッドを使います。

ID = ['aaa', 'bbb', 'ccc'].map(&:freeze).freeze

変数について

クラスインスタンス変数、クラス変数、グローバル変数について学びます。クラスインスタンス変数は、インスタンスに依らない変数です。インスタンスメソッド内で共有されることがなく、継承関係でも共有されません。一方で、クラス変数は共有されます。グローバル変数は、プログラムのどこからでもアクセス可能です。

演算子のオーバーライド

クラスに演算子を定義して比較できるようにします。

class Point
  attr_reader :a, :b

  def initialize(a, b)
    @a = a
    @b = b
  end

  def <=>(other)
    if @a == other.a
      @b - other.b
    else
      @a - other.a
    end
  end

  def to_s
    "#{@a} #{@b}"
  end
end

points = [Point.new(1, 4), Point.new(1, 2), Point.new(2, 8)]
points.sort!
points.each{|point|
  p point.to_s
}
# "1 2"
# "1 4"
# "2 8"

感想

7章の内容は以上です。軽く読んだところもあるので、また読み返したいと思います。