この記事を読んでわかること
モジュールとは何か、モジュールの使い方。
目次
-
モジュールとは.
-
クラスとモジュールの違い.
-
モジュールの使用用途.
-
名前空間の提供
-
インスタンスメソッドとして取り込む(Mix-in)
-
モジュールをオブジェクトに取り込む
モジュールとは.
→メソッドを集めたもの.
それとってクラスじゃないの?と思ったのは私だけでしょうか?
モジュール↓
module Salary
def calculate_salary
end
def kihon
end
def teate
end
クラスとほとんど同じやん‥.
class クラス名
で定義するところが
module モジュール名
に変わっただけやん‥だがしかし
1. クラスとモジュールの違い.
簡単に比較してみるとクラスの劣化版のような印象を受けました。この時点でモジュールを使う理由がないと感じたのは私だけでしょうか? しかし
1. モジュールの使用用途
-
名前空間の提供
-
インスタンスメソッドとして取り込む(Mix-in)
-
クラスメソッドとして取り込む
-
モジュールをオブジェクトに取り込む
1. 名前空間の提供
名前空間の提供とは?
⇨同じ名前のメソッドやクラス名を使えるようにする機能.
module Person
class Student
def self.say
puts "I'm Ken."
end
end
end
class Student
def self.say
puts "私はケンです"
end
end
Person::Student.say
#=> "I’m Ken."
Student.say
#=> 私はケンです
module モジュール名でクラスを入れ子構造にすることで下のStudentクラスとは別のメソッドだと表現している。
#1. インスタンスメソッドとして取り込む(Mix-in)
→モジュール内で定義したメソッドをクラスの中にインスタンスメソッドとして取り入れることができる=Studentクラスでgreetメソッドが使用できる
クラス内で
include モジュール名
と定義すれば使えるようになる.
↓こんな風にインスタンスメソッドとして使用できる。
student = Student.new
student.greet
→puts ”こんにちは”と出力される
モジュールをオブジェクトに取り込む
特異メソッドとして取り込むこともできます。
class Greet
def say
puts "Hello"
end
end
obj = Greet.new
obj2 = Greet.new
#↓特異メソッドという。オブジェクト.メソッド名で定義する
def obj.hi
puts "よろしく"
end
puts obj.hi ⇨よろしく
puts obj2.hi⇨エラー