導入
オブジェクトを puts でそのまま表示したいときや、「特定のオブジェクトに属さない、クラス全体で使う処理」を作りたいときがあります。それぞれ to_s メソッドとクラスメソッドで実現します。
説明
to_s メソッドを定義しておくと、puts オブジェクト や文字列補間 "#{オブジェクト}" のときに自動的に呼ばれます。
class Point
def initialize(x, y)
@x = x
@y = y
end
def to_s
"(#{@x}, #{@y})"
end
end
p1 = Point.new(1, 2)
puts p1
puts "座標: #{p1}"
self は「このメソッドを呼んでいるオブジェクト自身」を指します。def self.メソッド名 と書くと、個々のオブジェクトではなくクラス自身に対して呼び出すクラスメソッドを定義できます。
class MathHelper
def self.double(n)
n * 2
end
end
puts MathHelper.double(21)
クラスメソッドは、MathHelper.new でオブジェクトを作らなくても MathHelper.double(21) のように直接呼び出せます。「特定のインスタンスに関係しない、道具として使うメソッド」によく使われます。
やってみよう
Point に別の to_s の中身を試してみましょう。MathHelper に self.square(n) のような別のクラスメソッドを追加してみてください。
演習
Temperature クラスに self.to_fahrenheit(celsius) というクラスメソッドを定義し、celsius * 9 / 5.0 + 32 を返すようにしてください。Temperature.to_fahrenheit(20) を puts で表示してください(68.0)。
ヒント1を見る
class Temperature def self.to_fahrenheit(celsius) celsius * 9 / 5.0 + 32 end end のように書きます。
ヒント2を見る
puts Temperature.to_fahrenheit(20) のように呼び出します。