オブジェクト

概要

Rubyを理解する上で重要な「オブジェクト」という概念を理解します。

純粋オブジェクト指向言語

Rubyはプログラミング言語の中でもオブジェクト指向言語と呼ばれるプログラミング言語の仲間です。 また、純粋なオブジェクト指向でもあります。

他の代表的なオブジェクト指向言語にはJavaやPythonなどがあります。 純粋なオブジェクト指向言語としてはSwiftなどがあります。

Rubyでは、プログラムで扱う全てのデータが「オブジェクト」です。

例えば

puts "Hello, world!"

"Hello, world!"は「文字列オブジェクト」ですし、

24 * 60 * 60

2460は「数値オブジェクト」です。

オブジェクトの種類

文字列オブジェクトや数値オブジェクトのように、オブジェクトには様々な種類があります。

代表的なオブジェクトの種類をいくつか説明します。

数値オブジェクト

その名の通り、数値データを表すオブジェクトです。 次のようなものがあります。

  • 0
  • 65536
  • 3.14
  • -10

文字列オブジェクト

文字列を表すオブジェクトです。

  • "Hello, world"
  • "こんにちは"
  • "12345"

数値オブジェクトの12345と文字列オブジェクトの"12345"は別物であるということに注意してください。

時刻オブジェクト

時刻を表すオブジェクトです。

irb(main):011:0> Time.now
=> 2015-10-13 10:55:13 +0900

範囲オブジェクト

範囲を表すオブジェクトです。

irb(main):013:0> 15..60
=> 15..60
irb(main):014:0> 0...256
=> 0...256
irb(main):015:0> "a".."z"
=> "a".."z"

シンボルオブジェクト

Ruby内で識別子(何かの名前を識別するためのラベル)としてよく使われるオブジェクトです。

irb(main):018:0> :itsasymbol
=> :itsasymbol
irb(main):019:0> :puts
=> :puts

配列オブジェクト

複数のデータを列としてまとめるためのオブジェクトです。

irb(main):020:0> ["hello", "こんにちは", "ニーハオ", "ナマステ", "チャオ", "ジャンボ"]
=> ["hello", "こんにちは", "ニーハオ", "ナマステ", "チャオ", "ジャンボ"]

ハッシュオブジェクト

複数のデータに名前をつけてまとめるためのオブジェクトです。

irb(main):021:0> {:english => "hello", :japanese => "こんにちは", :swahili => " ジャンボ"}
=> {:english=>"hello", :japanese=>"こんにちは", :swahili=>"ジャンボ"}

クラス

オブジェクトの種類のことを「クラス」といいます。 例えば文字列はStringクラスのオブジェクトです。

クラスは、オブジェクトに対して.classをつけると確認することができます。

irb(main):022:0> "Hello, world".class
=> String

練習問題

(1) 数値オブジェクトのクラス

数値オブジェクトの中にも色々なクラスがあります。例えば、整数と小数ではクラスが違います。 どのようなクラスがあるか調べてください。

irb(main):029:0> 1.class
=> Fixnum

(2) 他のオブジェクトのクラス

他の様々なオブジェクトのクラスを調べてください。

  • 時刻オブジェクト
  • 範囲オブジェクト
  • シンボルオブジェクト
  • 配列オブジェクト
  • ハッシュオブジェクト
irb(main):030:0> Time.now.class
irb(main):031:0> (1..100).class

(3) クラス変換

オブジェクトの中には、クラスを変換できるものもあります。 例えば、文字列オブジェクトの"12345"は次のようにして数値オブジェクトに変換できます。

irb(main):032:0> "12345"
=> "12345"
irb(main):033:0> "12345".class
=> String
irb(main):034:0> "12345".to_i
=> 12345
irb(main):035:0> "12345".to_i.class
=> Fixnum

整数に変換するのが.to_i(to integer)、小数に変換するのが.to_f(to float)です。 逆に文字列に変換するのはto_s(to string)です。

整数、小数、文字列のオブジェクトを互いに変換して変換前と変換後のクラスを確かめてください。