導入
「オブジェクト指向」と聞くと難しそうに感じるかもしれませんが、Ruby ではもっと身近な話です。実は、これまで使ってきた数値や文字列、配列もすべて「オブジェクト」なのです。
説明
classDiagram Animal <|-- Dog Animal : +String name Animal : +speak() Dog : +speak()
どんな値にも .class を呼ぶと、その値がどんな種類(クラス)かが分かります。
puts 1.class
puts "hello".class
puts [1, 2].class
puts({a: 1}.class)
puts true.class
puts nil.class
puts 5.is_a?(Integer)
puts "hi".is_a?(String)
1.classはInteger、"hello".classはStringのように、値それぞれに対応するクラスがあります。.is_a?(クラス名)は、その値が指定したクラスかどうかをtrue/falseで答えてくれます。
数値や文字列にメソッド(.class や .upcase など)を呼べるのは、それらが単なる「データ」ではなく「メソッドを持つオブジェクト」だからです。これが Ruby の「すべてはオブジェクト」という考え方です。
やってみよう
他の値(配列、ハッシュ、nil、true/false)の .class をいろいろ確かめてみましょう。is_a? にいろいろなクラス名を渡して true/false の違いも見てください。
演習
3.14 の .class を puts で表示してください(Float)。
ヒント1を見る
puts 3.14.class の1行で求められます。
ヒント2を見る
小数(浮動小数点数)は Float クラスです。