感謝のプログラミング 10000時間

たどり着いた結果(さき)は、感謝でした。

クラスの作り方。アクセサメソッドについて。

<スポンサーリンク>

会社で1からLinuxサーバを作る必要があったんだけど、社内からはインターネットにはつながらず。
インストールイメージも社内のPCだとDVDに焼くこともできず、八方塞がりだったんだけど、このCentOSの本にものすごく救われた。

詳細な設定手順も書いてあり、その手順の意味も説明してくれているため、迷うこと無くサーバを作ることができた。
付属のDVDにも助けられた。

Linuxインストール用DVDの作成はダウンロードに時間がかかる上に途中で止まるから、心が折れてしまった。
ダウンロードしている途中でファイルは破損したり、pocketWi-Fiなら容量制限に引っかかって途中から回線が極端に絞られてしまう。

結局、書籍付属のDVDにすごく助けられたというわけでござる。
(ちゃんとウイルスチェックもしました)

CentOS 6で作るネットワークサーバ構築ガイド (Network Server Construction Guide S)

CentOS 6で作るネットワークサーバ構築ガイド (Network Server Construction Guide S)

★★
Rubyで複合データを表すんはクラスを使う。
クラスを作るには予約後「class」を使う。

インスタンスを作るには、クラスがあらかじめもっている「newメソッド」を呼び出して作成する。

#Personクラスを作る
class Student
	#クラスの定義
end

#Personクラスのインスタンスを作成する。
mizky = Person.new

インスタンスを初期化するのはinitializeメソッド。

#Personクラスを作る
class Person
	#Personクラスのインスタンスを初期化する
	def initialize ( name, age )
		@name = name
		@age = age
	end
end

initializeメソッドは外部から呼び出し不可能である。
すなわち可視性がプライベートである。

新しいクラスを定義するとき、そのクラスは「Objectクラス」を元に作られる。
「newメソッド」はObjectクラスの操作として用意されている。

JavaでいうtoString()に当たるもの。Rubyではto_s

class Person
	def initialize( name, age )
		@name = name
		@age = age
	end
	
	def to_s
		"#{@name}, #{@age}"
	end
end

実際にPersonクラスを作ってみる

# -*- coding: utf-8 -*-
# Personクラスを作る
class Person 
	#Personクラスのインスタンスを初期化する
	def initialize( name, age) 
		@name = name
		@age = age
	end
	
	def to_s
		"#@name, #@age"
	end
end

# Personクラスのインスタンスを作成する
mizky = Person.new('伊藤 mizky',27)
tkk = Person.new('保坂たかき',25)

# インスタンスの名前と年齢を表示する
puts mizky.to_s
puts tkk.to_s

実行結果

伊藤 mizky, 27
保坂たかき, 25


アクセサとは、属性を操作するメソッドのことである。
ゲッターとは、属性を参照するアクセサのことである。
セッターとは、属性を設定するアクセサのことである。

上のクラスにゲッターを加えてみる

# -*- coding: utf-8 -*-
# Personクラスを作る
class Person 
	#Personクラスのインスタンスを初期化する
	def initialize( name, age) 
		@name = name
		@age = age
	end
	
	# name getter
	def name
		@name
	end
	
	# age getter
	def age
		@age
	end
	
	def to_s
		"#@name, #@age"
	end
end

# Personクラスのインスタンスを作成する
mizky = Person.new('伊藤 mizky',27)
tkk = Person.new('保坂たかき',25)

# インスタンスの名前と年齢を表示する
puts mizky.to_s
puts tkk.to_s

puts "-----------------"
# ゲッターを使ってみる
puts "#{mizky.name} : #{mizky.age}"
puts "#{tkk.name} : #{tkk.age}"

結果

伊藤 mizky, 27
保坂たかき, 25
-----------------
伊藤 mizky : 27
保坂たかき : 25


セッターメソッドは、指定した属性に対して、メソッドの引数に渡された値を設定するメソッドである。

# -*- coding: utf-8 -*-
# Personクラスを作る
class Person 
	#Personクラスのインスタンスを初期化する
	def initialize( name, age) 
		@name = name
		@age = age
	end
	
	# name getter
	def name
		@name
	end
	
	# age getter
	def age
		@age
	end
	
	# name setter
	def name=( value )
		@name = value
	end
	
	# age setter
	def age=( value )
		@age = value
	end
	
	def to_s
		"#@name, #@age"
	end
end

# Personクラスのインスタンスを作成する
mizky = Person.new('伊藤 mizky',27)
tkk = Person.new('保坂たかき',25)

# インスタンスの名前と年齢を表示する
puts mizky.to_s
puts tkk.to_s

# セッターを使って名前や年齢を変化させる(設定する)
mizky.name = "瑞貴"
mizky.age = 28

tkk.name = "保坂"
tkk.age = 27

puts "-----------------"
# ゲッターを使ってみる
puts "#{mizky.name} : #{mizky.age}"
puts "#{tkk.name} : #{tkk.age}"

実行結果

伊藤 mizky, 27
保坂たかき, 25
-----------------
瑞貴 : 28
保坂 : 27


アクセサメソッドを使って属性の参照や変更を簡単にする
Rubyでセッターやゲッターを設けるための簡便な方法としてアクセサメソッドがある。
・attr_readerメソッドは引数に指定されたインスタンス変数へのゲッターを提供する
・attr_writerメソッドは引数に指定されたインスタンス変数へのセッターを提供する
・attr_accessorメソッドはゲッターとセッターを提供する
・アクセサのメソッド名はそのインスタンス変数と同じ名前になる

アクセサメソッドを使ったRubyサンプル

# -*- coding: utf-8 -*-
# Personクラスを作る
class Person 
	#Personクラスのインスタンスを初期化する
	def initialize( name, age) 
		@name = name
		@age = age
	end
	
	# setterやgetterは自分でメソッドを書かなくても、アクセサメソッドに定義すればイイ。
	# nameとageのアクセサ
	attr_accessor :name, :age
	
	def to_s
		"#@name, #@age"
	end
end

# Personクラスのインスタンスを作成する
mizky = Person.new('伊藤 mizky',27)
tkk = Person.new('保坂たかき',25)

# インスタンスの名前と年齢を表示する
puts mizky.to_s
puts tkk.to_s

# セッターを使って名前や年齢を変化させる(設定する)
mizky.name = "瑞貴"
mizky.age = 28

tkk.name = "保坂"
tkk.age = 27

puts "-----------------"
# ゲッターを使ってみる
puts "#{mizky.name} : #{mizky.age}"
puts "#{tkk.name} : #{tkk.age}"

結果

伊藤 mizky, 27
保坂たかき, 25
-----------------
瑞貴 : 28
保坂 : 27


Rubyの繰り返し
・timesメソッド

繰り返したい回数.times do
	繰り返したい処理
end

参考

作りながら学ぶ Ruby入門

作りながら学ぶ Ruby入門