プログラミング備忘録

プログラミングの学習状況をメモしています

30日目

今日の学習

Ruby

やんばるエキスパートにあるチャレンジ課題に挑戦。

やんばるエキスパート教材 | ドラクエ風プログラムを作ろう!

Rubyを勉強しはじめの頃に、バトルをするプログラムをどうやってループさせればいいのか分からない!となっていたが、ちゃんとできるようになって良かった。

Ruby本で、クラスについて学習。

クラス

まず、Rubyではオブジェクトは必ず何らかのクラスに属している。

クラスが同じであれば、そのクラスが保持している属性や使えるメソッドが同じになる。

やっとこのあたりについて理解できてきた気がする。

あらかじめRubyで設定されているクラスを使っているという認識がなかったので、整数はIntegerクラスに分類されていて〜〜というような表現を見ても、いまいちぴんとこなかった。

クラスメソッド

クラスの関連性は深いものの、ひとつひとつのインスタンスに含まれるデータは使わないメソッドを定義したい場合は、それをクラスメソッドとして定義する。

クラスメソッドは、メソッド名の前にself.をつける。もしくは、class << self ... ... endとして、endの間にメソッドを書く。

git

pushもpullもできない

pushしようとしてもエラーが出てしまったので、pullしようとしたら、fatal: refusing to merge unrelated historiesと出てきてどちらもできないという状態に。

qiita.com

この記事の通りにすると無事pushできるようになった。

今日のやらかし

attr_writerをつけずに値を書き換えようとする

ドラクエのようなバトルをするプログラムを作っていたのだが、敵に攻撃をしてHPを減らそうという操作がうまくいかない。

monster.hp -= monster_damage

こんな感じで、敵へ与えた攻撃の値をmonster_damageにして、敵のHPから引いてみようと思ったのにエラーが出てしまう。

undefined methodhp=' for #<Monster:0x00007ff23e872368> (NoMethodError)`

原因は、attr_writerを設定していなかったので、値の書き換えができないという至極単純なことだった。

無闇にattr_accessorを使わないようにして、とりあえず読み取りのためにattr_readerだけを設定していたのだった。

気づけば何でもないことであったが、エラー文のhp=ってなんだ...と変なところでつまづいていた。

とりあえず必要な分だけアクセサを準備して、値の変更が必要だと思ったら書き換えのアクセサも一緒に追加する癖をつけたい。