【Ruby】Railsコンソールで、Structをちゃちゃっと理解しよう。
割と便利なStructですが、実際に使っている現場は少ないかもなぁというのが個人的な印象。この記事では、「Structってこんなものだよ」をざっくりと説明します。
2024年03月27日
関連記事
この場合に使うべきというものはないのですが、個人的に使いやすい場面としては モデルに直接対応しないケース
が多いかなと思います。
※ 集計やCSVインポート機能など
Structの作成
では、Railsコンソールで試していきます。
$ rails c
1. Structの定義
Railsコンソールが立ち上がったら、早速定義していきます。
シンプルに、名前と年齢の情報を持ったStructです。
> Person = Struct.new(:name, :age)
2. インスタンスの生成
名前はアリスさん。30歳です。素敵ですね。
> person = Person.new("Alice", 30)
3. 属性へのアクセスと変更
名前、年齢をそれぞれ確認してみましょう。
> person.name # Alice
> person.age # 30
おっと、アリスさん、年齢をサバ読んでいたようです。
ここはちゃんとシビアにみます。
> person.age = 31
> person.age # 31
おっと、実はよしこさんだったようですね。こちらも変えてみます。
> person.name = 'よしこ'
> person.name # よしこ
※ Structで読み取り専用な属性を設定するのはちょっと複雑。場合によってはおとなしくクラスにすべし。
応用
ここからはちょっとした応用です。
Structはクラスにするまでもないけど、クラスっぽく扱いたいな〜という時に便利。
なるべく複雑なことはさせないようにしましょう。
1. メソッド
カスタムメソッドを追加することもできます。
先ほどまでは年齢を直接突っ込んでましたが、生年月日(YYYYMMDD)から年齢を出したい…みたいなこともできるってことですね。
> Person = Struct.new(:name, :birthday) do
def age
today = Date.today.strftime("%Y%m%d").to_i
birth_date = self.birthday.to_i
(today - birth_date) / 10000
end
end
動かしてみましょう。
> person = Person.new("Yutahhhh", "19941007")
> person.birthday # 19941007
> person.age
2. 継承
実は継承も。ぶっちゃけ実務で使ったことはありません。
とりあえず豆知識程度に覚えておきましょう。
> class Employee < Struct.new(:name, :age)
def introduce
"名前: #{name}, 年齢: #{age}歳"
end
end
> employee = Employee.new("Yutahhhh", 29)
> employee.introduce # 名前: Yutahhhh, 年齢: 29歳