はじめに
プログラミング学習中の者です。初投稿です。
学習したことを書くことで、自分の中により定着させることができればと思っています。
よろしくお願い致します。
早速本題に入ります。
本題
某プログラミングスクールで出たRubyの問題について、解答に少し手間取ってしまったので忘れないためにメモします。
すごく初歩的な問題ではあるのですが・・
問題と正解は下記の通り(問題の内容がそのままだと宜しくないのでちょっとだけ変えてます)。
問題
class Article
def initialize(author, title, content)
@author = author
@title = title
@content = content
end
end
# クラスとインスタンスを使用して、上記のコードに追加を行い、以下の出力結果を得られるようにする
書いた人: 鈴木
タイトル: はじめまして
本文: 初投稿です
正解(模範解答)
class Article
def initialize(author, title, content) #3行目
@author = author
@title = title
@content = content
end
def author #9行目
@author
end
def title #13行目
@title
end
def content #17行目
@content
end
end
article1 = Article.new("鈴木", "はじめまして", "初投稿です") #23行目
puts "書いた人: #{article1.author}" #25行目
puts "タイトル: #{article1.title}"
puts "本文: #{article1.content}"
自分のために解説してみる
まず最初に下記を押さえておく
- インスタンスメソッドはクラスの中で定義する
- initializeメソッドもインスタンスメソッドの1つ
- インスタンス変数は、そのクラス内すべてのインスタンスメソッドで使える(スコープ)
それぞれの行について詳しく
(3〜7行目)
initializeメソッドの中で定義したインスタンス変数に、引数で受け取った、鈴木
、はじめまして
、初投稿です
という3つの値をそれぞれのインスタンス変数に代入する。
(9〜19行目)
インスタンス変数の値を返すためのインスタンスメソッドをそれぞれ定義する。
当然ながら、例えば、これらのインスタンスメソッドを定義しない状態で、25行目をarticle1.author
ではなく@author
と書いたところで鈴木
とは出力されない。
(23行目)
Articleクラスのインスタンスを生成し、変数article1に代入。
その際に実引数として鈴木
、はじめまして
、初投稿です
という3つの値を、仮引数author
、 title
、content
にそれぞれ渡している。
(25〜27行目)
9〜19行目で定義したインスタンスメソッドを呼び出す。
インスタンスメソッドはインスタンス名.メソッド名
で呼び出せる。
おわり
この記事を書いたおかげで、クラスとインスタンスに関することを忘れないようにできたのではないかと思います。
いい機会になりました。また何かあったら書いてみます。
ここまでお付き合いしてくださった方ありがとうございました。