バナー画像

クラスに関する前2記事「【Ruby入門】クラスとオブジェクト」「【Ruby入門】クラスの継承、オーバーライド 」を読んでいただいた方々は、なんとなく釈然としないはずです。

それもそのはず、ソースコードが一切出てきていないからです。

コードを実際に見ないと、プログラマ的に納得できないですよね。

よって本記事では、今まで学習してきたことをソースコードにしてみます。

前2記事と本記事を行ったり来たりして、理解を深めてくださいね!

クラスの基本形 def 〜 end

ではまず、クラスの基本形からいきましょう。

以下のとおりです。

class クラス名 
  # 処理の中身
end

これ以降、今までさんざん出てきたBookクラスを順に作っていきましょう。

まずはBookクラスの枠組みを作ります。

class Book

end

コンストラクタとインスタンスメソッド

コンストラクタとインスタンスメソッドを作りましょう。

前記事では変数はたくさん出てきましたが、本のタイトルと著者だけに省略します。

class Book

	# コンストラクタ (initializeメソッド)
	def initialize(mytitle = "", myauthor = "")
		@title = mytitle
		@author = myauthor
	end

	# インスタンスメソッド
	def display
		puts "title = " + @title + " ; author = " + @author
	end

end

(実行しても何も返ってきません。)

Rubyでは、インスタンス直後に自動的に呼ばれるメソッドを、initializeメソッドといいます。前記事でコンストラクタとして解説したものと同じです。

インスタンス変数は@で始まります。

mytitle = “” と myauthor = “” は、インスタンス化のときに引数を受け取り、それをインスタンス変数に格納する記述です。しかし何も受け取らなければ空文字を入れるという意味になります。

インスタンスメソッドdisplayを追加してみました。インスタンス化したあとに呼び出せるメソッドです。後ほど解説します

アクセサメソッド

インスタンスの外部からインスタンス内部の変数へ直接アクセスせず、アクセサメソッド経由でアクセスするのが一般的です。

よって、アクセサメソッドを追加してみましょう。

class Book

	# コンストラクタ (initializeメソッド)
	def initialize(mytitle = "", myauthor = "")
		@title = mytitle
		@author = myauthor
	end

	# ゲッターメソッド
	def title
		@title
	end

	#セッターメソッド
	def author(value)
		@author = value
	end

	# インスタンスメソッド
	def display
		puts "title = " + @title + " ; author = " + @author
	end

end

もちろんこれでもよいのですが、もう少しスマートに書きましょう。

class Book

	# アクセサメソッド
	attr_accessor :title
	attr_accessor :author

	# コンストラクタ (initializeメソッド)
	def initialize(mytitle = "", myauthor = "")
		@title = mytitle
		@author = myauthor
	end

	# インスタンスメソッド
	def display
		puts "title = " + @title + " ; author = " + @author
	end

end

attr_accessorメソッドを使いました。

アクセサメソッドの種類は以下のとおりです。仕様に応じて適切なものを選んでください。

 

 

クラスメソッド、定数

クラスメソッドは、クラスそのものに紐づくメソッドです。インスタンスとは無関係です。

class << クラス名
	# 処理
end

早速使いましょう。何回インスタンス化されたかを管理する変数countを定義します。

頭に@を2つ付けて変数名を書くと、クラス変数の定義になります。

class Book

	@@count = 0

	class << count
		puts "count = " + @@count
	end

	# アクセサメソッド
	attr_accessor :title
	attr_accessor :author

	# コンストラクタ (initializeメソッド)
	def initialize(mytitle = "", myauthor = "")
		@title = mytitle
		@author = myauthor
		@@count += 1
	end

	# インスタンスメソッド
	def display
		puts "title = " + @title + " ; author = " + @author
	end
end

クラスメソッド定義の部分「class << count」は、以下のように書くことも可能です。

def self.count
    puts "count = " + @@count
end

クラス変数は、外からもアクセスできます。このように宣言します。

class Book

	Summary = "Book class"

	# 以下省略

end

呼び出すときは以下のとおりです。コロンを2つつなげます。

class Book
	# 省略
end

p Book::Summary

[実行結果]

"Book class"

メソッドのアクセス修飾子を定義する

メソッドによっては他からアクセスさせてはいけないものがあります。

Bookクラスでいうと、インスタンス変数を初期化するメソッドなどです。

そのようなメソッドは、他から呼ばれないようにprivateにしましょう。

class Book

	# 中略

	private

	def val_init
		@title = 0
		@author = ""
	end

end

privateを書いた以降に定義したメソッドは、すべてprivateになります。

特定のメソッドだけprivate指定したい場合は、以下のようにします。

class Book

	# 中略

	def val_init
		@title = 0
		@author = ""
	end

	private :val_init

end

ここまでの完成形

今までの内容でできたクラスの完成形は以下のとおりです。じっくりご覧ください。

class Book

	Summary = "Book class"

	@@count = 0

	class << self
		puts "count = " + @@count.to_s
	end

	# アクセサメソッド
	attr_accessor :title
	attr_accessor :author

	# コンストラクタ (initializeメソッド)
	def initialize(mytitle = "", myauthor = "")
		@title = mytitle
		@author = myauthor
		@@count += 1
	end

	# インスタンスメソッド
	def display
		puts "title = " + @title + " ; author = " + @author
	end

	# 非公開 (プライベートメソッド)
	private

	def val_init
		@title = 0
		@author = ""
	end
end

まとめ

本記事では、Rubyのクラスの基本を解説しました。

ここまで来るのは大変だったでしょう?お疲れさまでした!

ただ、残念ながら大切な話はまだ続きます。

もう少しお付き合いください!

エンジニアになりたい人に選ばれるプログラミングスクール「ポテパンキャンプ 」

ポテパンキャンプは卒業生の多くがWebエンジニアとして活躍している実践型プログラミングスクールです。 1000名以上が受講しており、その多くが上場企業、ベンチャー企業のWebエンジニアとして活躍しています。

基礎的な学習だけで満足せず、実際にプログラミングを覚えて実践で使えるレベルまで学習したいという方に人気です。 プログラミングを学習し実践で使うには様々な要素が必要です。

それがマルっと詰まっているポテパンキャンプでプログラミングを学習してみませんか?

卒業生の多くがWebエンジニアとして活躍

卒業生の多くがWeb企業で活躍しております。
実践的なカリキュラムをこなしているからこそ現場でも戦力となっております。
活躍する卒業生のインタビューもございますので是非御覧ください。

経験豊富なエンジニア陣が直接指導

実践的なカリキュラムと経験豊富なエンジニアが直接指導にあたります。
有名企業のエンジニアも多数在籍し品質高いWebアプリケーションを作れるようサポートします。

満足度高くコスパの高いプログラミングスクール「ポテパンキャンプ」

運営する株式会社ポテパンは10,000人以上のエンジニアのキャリアサポートを行ってきております。
そのノウハウを活かして実践的なカリキュラムを随時アップデートしております。

代表の宮崎もプログラミングを覚えサイトを作りポテパンを創業しました。
本気でプログラミングを身につけたいという方にコスパ良く受講していただきたいと思っておりますので、気になる方はぜひスクール詳細をのぞいてくださいませ。