Ruby クラスとインスタンス変数


スポンサーリンク

1.基礎

オブジェクトの設計図にあたるものがクラス。
なんかこの説明だとわかりづらいかもしれないけれど、要は雛形だよね。

クラスという雛形から、たくさんの同じようなオブジェクトを作る。

零戦の設計図を書いたら、工場で零戦の実機ができたわけで、それと同じ。

で、オブジェクトには色んなプロパティがあって、それは例えば飛行機だったら、「プロペラ」だったり、「椅子」だったりする。
オブジェクトのメソッドというのは、動作を示すもので、これも飛行機に例えたら、「飛ぶ」とか「着地する」とかそういう動作があるよね。

それをdef flyみたいにして、表現しているのがオブジェクト。

Rubyのクラスは

class クラス名
	def メソッド
		#メソッドの内容
	end
end

インスタンス変数は変数の頭に「@」をつけて記述する。
インスタンス変数へのアクセスは、「アクセサ」と呼ばれるメソッドを自動生成する機能を使えば、よりシンプルにインスタンス変数へのアクセスができるようになる。

アクセサ 機能
attr_accessor: インスタンス変数を読み書きする機能を提供する
attr_reader インスタンス変数の値を取り出す機能を提供する
attr_writer インスタンス変数の値を変更する機能を提供する

2.サンプル

・アクセサを使わない場合

# -*- coding: UTF-8 -*-

class Book

	def initialize name
		@title = name.to_s
	end

	def setTitle name
		@title = name.to_s
	end

	def getTitle
		return @title
	end

	def callTitle
		puts "This book is " + @title
	end

end

mybook = Book.new 'The Catcher in the Rye'
puts mybook.getTitle

mybook.setTitle 'Breakfast at Tiffanys'
mybook.callTitle

・アクセサ使う場合

# -*- coding: UTF-8 -*-

class Book

	attr_accessor:title
	def initialize name
		@title = name.to_s
	end

	def callTitle
		puts "This book is " + @title
	end

end

mybook = Book.new 'The Catcher in the Rye'
puts mybook.title

mybook.title = 'Breakfast at Tiffanys'
mybook.callTitle

3.デモ

アクセサを使っても使わなくても、以下のように表示される。

>ruby sample.rb
The Catcher in the Rye
This book is Breakfast at Tiffanys