おはよーございます。
忘れたころにやってくる、久々のプログラミング記事です。
前回プロレス団体のクラスを作ってみたので、今回はプロレスラーを表すクラスを作ってみました。
レスラーclassの定義
class Wrestler
attr_reader :profile, :unit, :ability, :skills
def initialize(profile, ability, skills)
@profile = profile
@ability = ability
@skills = skills
@unit = nil
end
end
名前や年齢などがprofile、レスラーの能力でability、プロレス技がskiilsという具合に定義してこれをレスラーのデータとして最初に入れとくイメージですね。ひとつだけ所属ユニットを表すunitを作ったものの、レスラーって最初からユニットの所属しているわけでもないような気がしていて、定義だけして何も入ってない状態です。このなんもないっていうのを表現するためにnilを入れてみることにしました。
Profileクラスの定義
今度はレスラークラスに入れ込むProfileの中身を定義してみることにしました。
class Profile
attr_reader :name, :birth_day, :gender, :weight, :height
def initialize(name, birth_day, gender, weight, height)
@name = name
@birth_day = birth_day
@gender = gender
@weight = weight
@height = height
end
end
最初はこんな感じでクラスとして定義してみたのですが、attr_readerに定義して、initalizeメソッドを作って、受け取るパラメータを書いて、そのパラメータを代入してってのが、なんかめんどくさく感じるようになってきました。で、調べてみるとどうやらStructを使うともっとスマートに書けそうだぞ、ってことでStructで書き直してみたのがこんな感じです。
Profile = Struct.new(:name, :birth_day, :gender, :weight, :height)
めっちゃシンプル!かつ無駄がない!!
データの塊を表現する場合は、Structを使ったほうが記述もシンプルで追加や変更がしやすそうですね。実際にデータを入れ込むときはこんな感じで使います。
Profile = Struct.new(:name, :birth_day, :gender, :weight, :height)
profile = Profile.new('タイチ',
DateTime.new(1980, 3, 19, 0, 0, 0),
gender: 'male',
height: 177,
weight: 100)
次なる課題は・・
さりげなく推してる選手を入れていくスタイルです。Struct.newしたもProfileという変数を元にして、実際のオブジェクトを生成しているんだと思います。理解がただしければ。これでいろんなレスラーを作ることができるようになりました。今のところ、データを入れ込んでるだけのプログラムしか書いていないので、次回はもう少し動きのあるプログラムを書きたいなと思っています。
適当に妄想しながら作るのって楽しいなあ😄 では、また!