9-1 モジュールのメソッドをクラスで使う「include」
1.「モジュール」(module)はインスタンスメソッドを生成することができ、そのメソッドを共有することができる
2. classの中に「module モジュール名」と書くことでそのモジュールに定義されている内容を利用することができる
module WhippedCream#-----「WhippedCream」モジュールを定義--------
def whipped_cream#-----「@nameにホイップクリームという文字を加えてくださいね」というメソッドを定義
@name += "ホイップクリーム"
end
end
class Drink
include WhippedCream#----DrinkクラスのオブジェクトはWhippedCreamモジュール内のメソッドを共有することができる-------
def initialize(name)
@name = name
end
def name
@name
end
end
class Cake
include WhippedCream
def initialize(name)
@name = name
end
def name
@name
end
end
drink = Drink.new("モカ")
drink.whipped_cream#----Drinkクラスには定義されていない「whipped_creamメソッド」を使うことができる---------
puts drink.name
cake = Cake.new("チョコレートケーキ")
cake.whipped_cream
puts cake.name
#=>モカホイップクリーム
#=>チョコレートケーキホイップクリーム
3. モジュールはインスタンスメソッドだけを共有するだけでなく、「クラスメソッド」についても「extend モジュール名」と書くことで共有することができる
module Greeting#-----「Greeting」モジュールを定義-----------
def welcome
"いらっしゃいませ"
end
end
class Shop
extend Greeting#-------「Greeting」モジュールをShopクラスメソッドとした--------
end
puts Shop.welcome
#=> いらっしゃいませ
9-2 モジュールのメソッドや定数をそのまま使う
1. moduleにおいてもクラスメソッドを呼び出したいときは、同じ形式を用いる
2. moduleで定義された定数を使う際は、「::」で繋げる
3. 自分で定義する他に、Ruby自体に定義されているMathモジュールというものもある
module WhippedCream
def self.info
"トッピング用ホイップクリーム"
end
end
puts WhippedCream.info
#=>トッピング用ホイップクリーム
module WhippedCream
Price = 100#------定数を定義するときは大文字で始まる---------
end
puts WhippedCream::Price
puts Math::PI#---円周率----
puts Math.cos(Math::PI)#Mathモジュール内で定数PIを使いたいときも、自分で定義したとき同様、「::」で繋げる
4. 同じクラスだが、別々に呼び出したいとき、モジュール名を使って分けて呼び出すことを「名前空間」を作ると言う
module KomedaCafe
class Coffee
def self.info
"コスパ"
end
end
end
module SutabaCafe
class Coffee
def self.info
"オシャレ"
end
end
end
puts KomedaCafe::Coffee.info#------モジュール名とクラス名を繋げるときは「::」を使う------
puts SutabaCafe::Coffee.info#------モジュール名とクラス名を繋げるときは「::」を使う------
#=>コスパ
#=>オシャレ
9-3 部品を別ファイルに分ける
1. 同じフォルダーに2つのファイルが有り、片方で定義している内容を、もう片方でも引き継ぎたい場合、引き継ぐ方のファイルに「repuire_relative ”ファイル名(.rbは除く)”」と書くことで利用することができる。つまりこれは別ファイルの定義を利用することのできる方法である
(whipped_cream.rb)
module WhippedCream
def whipped_cream
@name += "ホイップクリーム"
end
end