1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

namespaceとは

Posted at

Namespace

Namespaceと検索すると名前空間という言葉が出てきた。

名前空間とは?

p265

クラス名の予期せぬ衝突を防ぐ「名前空間(ネームスペース)」を作る場合によく使われます。たし、名前空間を作る場合はクラスよりもモジュールが使われることが多いです。名前空間やモジュールについては第8章で説明します。

  • 名前空間とnamespaceは同じのようだ。
  • 名前空間はクラスよりもモジュールが使われることが多いです。

名前空間を分けて名前の衝突を防ぐ

自分だけ使う小さなプログラムを書いているうちはあまり問題になりませんが、大規模なプログラム>や外部に公開するライブラリを作ったりするときはクラス名の重複が問題になることがあります。例えば、ある人が「野球の二塁手」という意味でSecondクラスを定義したとします。

class Second
 def initialize(player, uniform_number)
   @player = player
   @uniform_number = uniform_number
 end
end

またある人は「時計の秒」という意味でSecondクラスを定義しました。

class Second
  def initialize(digits)
    @digits = digits
  end
end
  • 同じ名前のクラスを同時に使用する場合に区別する必要がある

p304

こんな時に登場するのが「名前空間(ネームスペース)」としてのモジュールです。モジュール構文の中にクラス定義を書くと「そのモジュールに属するクラス」という意味になるため、同名のクラスがあっても外側のモジュール名さえ異なっていれば名前の衝突が発生しなくなります。

module Baseball
  class Second
    def initialize(player, uniform_number)
      @player = player
      @uniform_number = uniform_number
    end
  end
end
=> :initialize
module Clock
 class Second
    def initialize(digits)
      @digits = digits
   end
  end
end
=> :initialize
Baseball::Second.new("Alice", 13)
=> #<Baseball::Second:0x0000000106a8d318 @player="Alice", @uniform_number=13>
Clock::Second.new(13)
=> #<Clock::Second:0x0000000106498598 @digits=13> module Baseball
  • モジュールを使うことによってクラスを同じ名前にしても判別に問題なくなる

名前空間でグループやカテゴリを分ける

名前空間は名前の衝突を防ぐためだけではなく、クラスのグループ分け/カテゴリ分けをする目的で使われる場合もあります。クラスが何十、何百もあるような大きなプログラムになってくると、カテゴリ別にモジュール(名前空間)を作って整理しないと、どれがなんのクラスなのかパッと把握しにくくなるためです。
...
このように、大規模なプログラムや不特定多数の開発者が利用する外部ライブラリでは、モジュールは名前空間を作成する目的でもよく使われています。

  • 用途によってrailsのモジュールで名前空間を守る
  • なんのクラス、モジュールをどうするかをわかりやすくしている。

ネストなしでも名前空間つきのクラスを定義する

名前空間として使うモジュールがすでにどこかで定義されている場合は、モジュール構文やクラス構文をネストさせなくても、”モジュール名::クラス名"のような形でクラスを定義することもできます。

module Baseball
end

class Baseball::Second
...
end

感想

rails apiを調べるとnamespaceという言葉が出てきたので理解しかった。

rails apiにおいて例えばActionDispatchをみるとnamespaceの欄にいつくものモジュールとクラスがある。つまりそれらの名前の衝突を防ぎ、カテゴリ・グループ分けしていることがわかった。

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?