ruby の自作クラス
ruby でクラスを作成するには
class クラス名
def initialize
初期化処理
end
def メソッド名
行う処理
end
end
となる
クラス名は大文字で始まるので注意
initialize は必須で
インスタンス作成のときの初期化につかう
この解説でわかりやすいのがドットインストール
今回は、ゲームの処理を想定
class Monster
def initialize(name)
@name = name
@hp = 100 +rand(100)
end
def damage
@hp -=10 + rand(10)
printf(“%s’s HP is now %d\n”,@name,@hp)
end
end
このメモを書いてみると
def initialize(name)
@name = name
@hp = 100 +rand(100)
end
の部分が initialize メソッドによる初期化処理
@name は名前
@hp はRPGのHPを意味している
def damage
@hp -=10 + rand(10)
printf(“%s’s HP is now %d\n”,@name,@hp)
end
は
ダメージを受けたときの処理を行うメソッド
@hp -=10 + rand(10)
でHPが減る仕組み
printf(“%s’s HP is now %d\n”,@name,@hp)
で
名前と現在のHPを表示している
続いて、HPが0になったら死亡メッセージ表示
printf(“%s is dead ….\n”,@name) if @hp < 0
ruby の場合、後に if 判定を書くやりかたをするので
他の言語からくるとちょっとわかりにくい
さらに、回復時のメソッド heal も追記
def heal
@hp += 10 + rand(10)
printf("%s's HP is now %d\n",@name,@hp)
end
これで、回復時の処理もつくれる
また initialize メソッドへ
printf("%s appeared. His HP is %d\n"@name,@hp)
とすれば初期化したときに
名前とHPが表示されるようになる
@がついた変数、今回なら
@name
@hp
これらは、インスタンス変数と呼ばれ
作成したメソッドだけでなく
class から生まれたインスタンスの中なら使える変数
になる
つまり
通常は、メソッドの中
def initialize の中だけになるけど
@ がつくことで
今回なら class Monster の中でなら使える変数になる
このため、
def damage
とか
def heal
という別のメソッドでも使えるようになっている