0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ミニツク演習3から学んだこと

Posted at

演習内容

ミニツクの「Ruby演習コース」演習3
URL: http://www.minituku.net/courses/500228005/contents/820836204.html

解答と実行例

上記サイトより引用。モジュールの解答と問題文で提示されたclassなどは同じファイルにまとめる想定です。

##### 本問題では以下モジュールの中身を考える。 #####
module Mail
  attr_reader :sender, :recipient, :text, :date   ### 要点1 ###
 
  def send
    puts "#{@date = Time.now}: Sending a #{self.class} to #{self.recipient}."   ### 要点2、4 ###
  end
 
  def write(text)
    @text = text
  end
 
  def to_s   ### 要点3 ###
    "#{self.class} of #{@date}:\n\nDear #{@recipient},\n\n#{@text}\n\nSincerely,\n#{@sender}"   ### 要点2 ###
  end
end

##### 以下、問題文で提示されている。 #####
class Postcard
  include Mail
  
  def initialize(sender, recipient)
    @sender, @recipient = sender, recipient
  end
end
 
card = Postcard.new("Me", "Friend")
card.write("Did you forget my birthsday?")
card.send
puts "-" * 60
sleep(2)
puts card

出力例

Tue Mar 22 11:59:16 +0900 2011: Sending a Postcard to Friend.
------------------------------------------------------------
Postcard of Tue Mar 22 11:59:16 +0900 2011:

Dear Friend,

Did you forget my birthsday?

Sincerely,
Me

学んだことなど

解釈間違っていたらお教えください

要点1「attr_readerは不要?」

要点1の行を消しても動きました。
そもそもattr_readerとはインスタンス変数のゲッターを実現するものです。
参考:https://pikawaka.com/ruby/attr_reader

ただ演習3のコードでは、外部からインスタンス変数を呼び出したりしていないので、特になくても良いのかなと感じました。

要点2「ダックタイピング」

要点2はダックタイピングを使ってるようです。
モジュールの中にself.classやself.recipientなどはありませんが、「呼び出し元のPostcardクラスにはきっとあるだろう(言ってしまえば、self.classやself.recipientをもつクラスなら何でもよい)」と期待する書き方をしています。

ダックタイピングについては以下が非常に分かりやすかったです。
https://qiita.com/shimgo/items/9d9fbab1e3a7c4343f7b

要点3「Object#to_s」

各オブジェクトにはto_sメソッドがデフォルトで定義されており、それを再定義しているそう。
オブジェクトを文字列変換しています。puts card.to_sじゃなくputs cardで文字列を表示できるので少し違和感を感じます。

参考:https://qiita.com/tbpgr/items/19b42765a7b9cb292f44

要点4「puts内の式の展開」

・puts "#{@date = Time.now}~ とあるのですが、そういう書き方もあるんだな~といった感じでした。putsの上で @date = Time.now を書くとかさばるからまとめているんでしょうか。

0
0
3

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?