[Ruby]クラス・モジュール個人的まとめ


「たのしいRuby 第4版」を読みながらクラス・モジュールについてまとめてみました。

javaとくらべて柔軟な定義・操作ができる印象を受けますが、しっかり理解して使わないとすぐ保守不能になりそうだと感じました。
大いなる力には大いなる責任が伴いますね。。。

クラス

require('./tax_calc.rb')

class Book
  #モジュールを追加
  include TaxCalc
  #includeでモジュールを追加するとインスタンスメソッドとして定義
  #extendでモジュールを追加するとstaticメソッドとして定義

  #外部から読み取れるかどうか。指定しなければフィールド変数はすべてprivate
  attr_reader:price
  
  #constructorはinitializeメソッドで定義
  def initialize(name,price)
    #インスタンスフィールドは@hoge として宣言する。staticフィールドは@@。
    @name=name
    @price=price
  end

  #instance method
  def getInfo
    return "bookname:#{@name},price:#{@price}"
  end

  #static method
  def Book.helloStaticOjisan
    puts "Hello,StaticOjisan!"
  end

end

モジュール

module TaxCalc
  def getTaxAddedPrice(price)
    return price*1.08
  end
end
#モジュールはインスタンス化できない。
#システム開発における用途としては、冪等性のあるビジネスロジックを集約して管理する使い方になるのかなあ。

継承

require('./book.rb')

#継承
class IsbnBook < Book
  def initialize(name,price,isbn)
    @name=name
    @price=price
    @isbn=isbn
  end
end

黒魔術

#すでに定義されているクラスにメソッドを追加する黒魔術
#どうみても使うと保守性落ちるので封印推奨
class String
  def count_word
    ary=self.split(/s+/)
    return ary.size
  end
end

module BlackMagic
  def doBlackMagic
    puts "Black Magic!"
  end
end

str="Just Another Ruby Newbie"
p str.count_word

#インスタンスに対してメソッドを追加するという暴挙
#メンテ不能になるので封印推奨
str.extend(BlackMagic)
str.doBlackMagic


ちなみに私の持っているのは第4版ですが第5版も出ているようです。