読者です 読者をやめる 読者になる 読者になる

国境の南

Ruby, Railsメイン

少しプログラミングの景色が変わった気がした写経①

久々のエントリです。

上司「お前全然ブログ書いてないじゃねえか!アウトプットしないと何も身につかないぞ!!」 本当にその通りなので継続的に頑張ります。

初歩的な内容かもしれませんが、写経をしていた中で、表題どおり、こんなことも出来るのか、と世界が広がった気がしたプログラムをいくつか紹介します。

class Yo
  def initialize(select)
    @selector = select
  end

  def yo
    puts(@selector.create_message)
  end
end

class EnglishYo
  def create_message
    "Yo!"
  end
end

class JapaneseYo
  def create_message
    "やあ"
  end
end

Yo.new(EnglishYo.new).yo
Yo.new(JapaneseYo.new).yo

>Yo!
>やあ
(※7.6 間違って、Hello.new(EnglishYo.new).yoとなっていたのを修正しました)

これの利点は - 呼び出しのフォーマットを統一できる - 何かが意図しない動作となったときに、どこを直すべきかを理解しやすい

これはポリモーフィズムというパターンで、ポリモーフィズムとは - 同じ名前のメソッドを呼び出すが、オブジェクトによって振舞いを変えること というパターンのようです。

技術部長に聞いてみたところ、 「きちんとポリモーフィズムを実現するためには、オブジェクトが適切にカプセル化されている必要がある。 要はオブジェクトが、正しい振舞いを知っている、ということで、カプセル化と表裏一体である」 とのコメントをいただきました。

色々アレンジしつつ写経して動かしてみると面白さが分かるかと思います。