本文へスキップ
BecomeCoder

Rubyコース · 第7章 クラスとオブジェクト指向 · レッスン29

すべてはオブジェクト ― classとis_a?

ブラウザで完結

導入

オブジェクト指向」と聞くと難しそうに感じるかもしれませんが、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.classInteger"hello".classString のように、値それぞれに対応するクラスがあります。
  • .is_a?(クラス名) は、その値が指定したクラスかどうかを true/false で答えてくれます。

数値や文字列にメソッド(.class.upcase など)を呼べるのは、それらが単なる「データ」ではなく「メソッドを持つオブジェクト」だからです。これが Ruby の「すべてはオブジェクト」という考え方です。

やってみよう

他の値(配列、ハッシュniltrue/false)の .class をいろいろ確かめてみましょう。is_a? にいろいろなクラス名を渡して true/false の違いも見てください。

演習

3.14.classputs で表示してください(Float)。

ヒント1を見る

puts 3.14.class の1行で求められます。

ヒント2を見る

小数(浮動小数点数)は Float クラスです。

実際に動かしてみよう

下のエディタにRubyを書いて「実行」を押すと、学習用シミュレータが puts / print / p の出力を表示します(本物のRubyではなく、教材の範囲を再現した軽量な自作エンジンです)。配列・ハッシュ・ブロック(each/map/select)・メソッド・クラス・モジュール・例外なども動きます。本文の例を書き換えて動かしてみましょう(gem・Rails・ファイル入出力など一部の機能は対象外です。文字列を伸ばすときは str << も可能ですが、変数に反映されるのは str += です)。

Ruby — ブラウザ内で実行(学習用シミュレータ)

Rubyの教材サブセットを動かす学習用シミュレータを読み込みます(本物のRubyではなく、動きを再現した軽量な自作エンジンです)。
スクロールして表示された時点でも自動で読み込まれます。