【Ruby】オブジェクトと変数・定数

「はじめてのRuby」を読んでのメモ。
今回は第4章「オブジェクトと変数・定数」


オブジェクト


  • 数値オブジェクト

「1」「-13」「3.14」などの数を表すオブジェクト。行列を表すオブジェクトや複素数を表すオブジェクト、数式を表すオブジェクトなどもある。

  • 文字列オブジェクト

「"こんにちは"」「"hello"」など、文字の並びからなるオブジェクト。

  • 配列オブジェクト、ハッシュオブジェクト

複数のデータをまとめるためのオブジェクト。

マッチングのためのパターンを表すオブジェクト。

  • 時刻オブジェクト

時刻を表すオブジェクト。「2014年1月8日午後9時」など。

  • ファイルオブジェクト

ファイルそのもの、というよりはファイルへの読み書きを行うためのオブジェクト。

  • シンボルオブジェクト

Ruby がメソッドなどの名前の識別に使うラベルを表すオブジェクト。


この他、「範囲オブジェクト」「例外オブジェクト」などが存在する。

クラス

クラスは、オブジェクトの種類を表すものである。
オブジェクトが属するクラスにより、オブジェクトがどのような性質を持つかが決められる。オブジェクトとクラスの対応は下のようになる

オブジェクト クラス
数値 Numeric
文字列 String
配列 Array
ハッシュ Hash
正規表現 Regexp
ファイル File
シンボル Symbol



あるクラスのオブジェクトのことをインスタンスということがあるが、Rubyの場合、全てのオブジェクトは何らかのクラスのインスタンスである。よって、インスタンスとオブジェクトはほとんど同じ意味で使われる。
一方で、あるオブジェクトがあるクラスに属していることを強調する場合に「インスタンス」という言葉をよく使う。例えば、「文字列オブジェクト "foo" は String クラスのインスタンスである」という。

変数

Rubyには4つの変数がある。
また、ある変数がどの種類の変数であるかは変数名によって決まる。

先頭がアルファベットの小文字か「 _ 」で始まる。

先頭が「 $ 」で始まる。

先頭が「 @ 」で始まる。

  • クラス変数

先頭が「 @@ 」で始まる。


この4つの他に、擬似変数と呼ばれる変数がある。擬似変数は「nil」や「true」など、特定の値を指し示すために予約された名前で、代入することによって値を変更することが出来ない。


一般的に、プログラムが必要以上に複雑になったり、プログラムの流れを追ったり修正が大変になるため、グローバル変数は好まれない。

定数

先頭がアルファベットの大文字で始まるものが定数となる。
たとえば、Rubyの処理系のバージョン(RUBY_VERSION)やコマンドライン引数の配列(ARGV)などが、組み込み定数として与えられている。

また、定数は変数と違い、一度代入した後にもう一度同じ定数に代入すると警告される。

多重代入

複数の変数への代入を1つの式で行うことが出来る機能のことをいう。

a, b, c = 1, 2, 3
#a = 1, b = 2, c = 3
a, b, c = 1, 2
#a = 1, b = 2, c = nil 
a, b, c = 1, 2, 3, 4
#a = 1, b = 2, c = 3
a, b, c* = 1, 2, 3, 4, 5
#a = 1, b = 2, c = [3, 4, 5]

a, b*, c = 1, 2, 3, 4, 5
#a = 1, b = [2, 3, 4], c = 5
a, b = 0, 1
a, b = b, a
#a = 1, b = 0
ary = [1, 2]
a, b = ary
#a = 1, b = 2
ary = [1, 2]
a, = ary
#a = 1



Rubyは代入が楽チンそうだなあ。