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)」が呼び出されて引数の値で初期化されています。
最近のコメント