Rubyでプログラムを作る際は「クラス」を定義して、そのオブジェクトを作ってプログラムを組み立てて行きます。
クラスの定義は以下のようにします。
class クラス名
def initialize()
処理
end
def メソッド
end
end
ではカレンダープログラムをクラスにしたコードを見て行きます。
#クラス定義
require "date"
class Calendar
def initialize(y,m)
@firstday = Date.new(y,m)
@lastday = Date.new(y,m,-1)
end
def disp
calendar = @firstday.strftime("%Y年 %m月")+"\n"
calendar += "日 月 火 水 木 金 土"+"\n"
if @firstday.wday != 0 then
for x in 1..@firstday.wday do
calendar += " "
end
end
for d in 1..@lastday.day do
if @firstday.wday == 6 then
calendar += sprintf("%2s ",d)+"\n"
else
calendar += sprintf("%2s ",d)
end
@firstday = @firstday.next
end
puts calendar
end
end
#クラスの利用
a = Calendar.new(2010,9)
a.disp
5行目でクラス名を決めています。なお最初の文字は大文字で書く必要があります。
7行目の「def initialize(y,m)」はコンストラクタです。これはクラスからオブジェクトを作るとき
最初に実行されるメソッドです。このメソッドはクラスに定義してある変数の初期化をするのに使用します。
def initialize(y,m)
@firstday = Date.new(y,m)
@lastday = Date.new(y,m,-1)
end
今回つくるカレンダークラスでは「initialize(y,m)」で引数に年と月を与えて「Date.new(y,m)」に渡し
「@firstday」と「@lastday」をDateクラスのオブジェクトとして利用します。変数名の前に「@」が付いていますが
これはクラス定義の中であればどこでも利用できる変数です。
12行目の「disp」メソッドは前回作成したプログラムの「show_calendar(y,m)」とほぼ同じです。
「disp」メソッドでコンソールにカレンダーを出力します。
36行目の「a = Calendar.new(2010,9)」でカレンダークラスのオブジェクトを作成しています。
「new(2010,9)」でオブジェクトを作成していますがカレンダークラスの内部では
「initialize(y,m)」が呼び出されて引数の値で初期化されています。
最近のコメント