こんにちは。Tomoyuki(@tomoyuki65)です。
Rubyには、クラスに似た概念としてモジュールというのがありますが、使ったことはありますか?
モジュールは、クラスと同様にメソッドや定数をまとめることができますが、クラスと違いインスタンス化や継承ができません。
ただし、モジュールはクラスやメソッド名の重複を避けたり、他のプログラミング言語のように多重継承の実現、そしてクラスの肥大化を抑えれるんです!
この記事では、モジュールの使い方について解説します。
モジュールの定義
モジュール定義する方法について見てみましょう。
モジュールを定義する場合、モジュール名の一文字目は必ず英大文字である必要があります。
module モジュール名 定数やメソッド end
モジュールから直接メソッドを呼び出したい場合は、2種類の記載方法があります。
例として以下のプログラムを実行してみて下さい。
module Say
# 定数を定義
VERSION = 1.0
# 1: selfオブジェクトを使用する
def self.hello
puts "Hello"
end
# 2: module_functionメソッドを使用する
def hi
puts "Hi"
end
module_function :hi
end
# モジュールから直接メソッドを実行
Say.hello
Say.hi
# 定数にアクセスする場合
puts Say::VERSION
Hi
1.0
実行結果の通り、モジュールを関数として使用することも出来ます。
名前空間
次は名前空間について説明します。
名前空間とは、名前の衝突を避けるために使う概念です。
プログラムが複雑になると、他の人が作成したクラス名やメソッド名と重複してしまう可能性がでてきます。
ただし、モジュールを名前空間として使用することで重複を避けることが出来ます。
では例として以下プログラムを実行してみて下さい。
# Userクラスを定義
class User
def say
puts "Hello"
end
end
# モジュールを名前空間としてUserクラスを定義
module Person
class User
def say
puts "Hello from module"
end
end
end
# Userクラスのインスタンスメソッドを実行
User.new.say
# 名前空間を利用する場合、「モジュール名 + :: + クラス名」 とする
Person::User.new.say
Hello from module
実行結果の通り、名前空間を利用することでクラス名やメソッド名の重複を避けることができます。
ミックスイン(Mix-in)
次はミックスインについて説明します。
ミックスインとは、モジュールをクラスで読み込むことです。
ミックスインを行うと、モジュール中のメソッドや定数を使用することが出来ます。
では以下のプログラムを実行してみて下さい。
# モジュールを定義
module Person
VERSION = 1.0
def say
puts "Hello from module"
end
end
# クラスからモジュールをincludeする
class User
include Person
end
# sayメソッドを実行
User.new.say
# VERSION定数にアクセス
puts User::VERSION
1.0
Rubyは単一継承のため、通常一度しかクラスの継承ができません。
ただし、ミックスインをすることで多重継承を実現することができます。
モジュールはクラスメソッドとして読み込むことができ、その場合は「extend」を使います。
以下のようにincludeをextendに変更し、User.sayを実行してみて下さい。
class User extend Person end User.say # 実行結果 => Hello from module
尚、extendの動作については特異クラスという概念の理解が必要になりますので、現時点では上記の点だけ理解しておけば良いでしょう。
まとめ
- Rubyではモジュールという概念があり、モジュール関数や、名前空間およびミックスインのために使うことができる
- 名前空間はクラス名やメソッド名の重複を避けるために利用し、ミックスインをすることで、多重継承を実現できる
- 関連記事
Tomoyuki
最新記事 by Tomoyuki (全て見る)
- 【スト6】モダンキャミィの初心者向けコンボまとめ【STREET FIGHTER 6(ストリートファイター6)】 - 2024年11月10日
- モンハンワイルズでおすすめのオプション設定まとめ【Monster Hunter Wilds】 - 2024年11月4日
- モンハンワイルズでおすすめのグラフィック設定まとめ【Monster Hunter Wilds】 - 2024年11月2日
コメントを残す