Ruby/クラスとインスタンスについて
rubyの問題を解いていたら、初歩的なところで躓いたのでここでアウトプットしておこうと思います。
このような問題が出題されました。
class 記事 def initialize(著者, タイトル, コンテンツ) @author = 著者 @title = タイトル @content = コンテンツ end end
*一部変更しています
上記のヒントを頼りに、
著者: 寿司 タイトル: 寿司の素晴らしさについて 本文: 寿司 マジうまい!
のように出力されるようにするという問題だったのですが。
put..........
で思考が止まってしまい、すぐに回答を見ました。
それでもわからず聞きましたが......
で、どのように考えていくかというと、
⑴putsを使って、インスタンス変数を出力しよう。
具体的にはこのように記述することを想定
puts "著者: #{展開式}"
文字列にインスタンス変数を入れる場合は展開式が必要。インスタンスメソッドを使用する時は、
なので、展開式の中はこうなる。
⑵インスタンス変数に入れたい値を代入しよう。
initializeメソッドは、インスタンスを生成したときに、同時に処理される。
インスタンスを生成する時に、仮引数としてinitializeメソッドに送れば、initializeメソッドに設定されている処理=今回の場合は、仮引数がインスタンス変数になる処理、がなされるので、インスタンス変数に入れたい値を代入することができる。
具体的には、
article = Article.new("寿司", "寿司の素晴らしさについて", "寿司 マジうまい!")
として、Articleというclassからarticleというインスタンスを生成する。
この時、仮引数として括弧の中においた値が仮引数となりinitializeメソッドに引き渡される。
⑶インスタンス変数を出力するメソッドを作ろう
インスタンス変数を出力するためにはインスタンスを出力するためのメソッドを作る必要がある。
そのため、今回の場合だと@author 、 @title 、@contentの3つのインスタンス変数を出力するためのメソッドを3つ作る必要がある。
メソッドの作り方はシンプルに、
def author @author end def title @title end def content @content end
と、このようにして作成する。
⑷あとは当てはめるだけ。
puts "著者: #{インスタンスメソッド名.インスタンス変数}"
に、これまで生成したメソッドとインスタンス変数を当てはめるだけ。
このようになる。