エンジニッキ

エンジニアとして日々学んだことを書き残しています

名前空間を理解しよう

業務でRubyソースコードを読んでいた時に、しばしば   ~::~(ダブルコロン)を使ったメソッドが出てきて....?となってしまったので先輩エンジニアに聞いてみると、どうやらこれは「名前空間」という技を使っていることが分かりました。今回は、名前空間について学習したことをメモしていきたいと思います。

 

 

1名前空間とは

名前空間はその名の通り、同じ名前のメソッドやクラスがあっても判別できるように空間を作ることです。違う表現をすると「名字だけだとわかんないから、名前も書いてくれ」という感じです。例えば「おい!佐藤」って呼ばれただけでは、佐藤が複数人いたら誰だかわかりませんよね。「佐藤 〜」って名前も読んであげれば、反応が帰ってくると思います。プログラムも同じで、同一の名前がある時は「どっちやねん」と困ってしまいます。その判別をするために必要なのが名前空間なのです。

言葉だけではわかりにくいので、コードで実行していきたいと思います。

 

同じクラスに同じメソッドが入っていますね。この状態で実行するとどうなってしまうのでしょうか?

 

後から定義した「こんばんは」が出力されましたね。これでは、「こんにちは」と挨拶したくても実行することができません。どうすればよいのでしょうか? ...そう、こんな時こそ名前空間の出番です!

 

まずは名前空間を使う準備します。準備は簡単で、1つ目のクラスをModuleで包んであげます。これだけで名前空間を作ることができます。

 

ではさっそく名前空間使ってみましょう!

 

 

今度は「こんにちは」を出力することができました!名前空間を使った箇所は

God::Person.new

 この行の部分です。何をしているのかは簡単で、「Godモジュール内のPersonクラスのインスタンスを作ってください。」と指定しています。こうすることによって、同じ名前でも存在している空間が違うため、判別ができるという仕組みです!