316
248

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Rubyにおけるドット記法,二重コロン記法

Last updated at Posted at 2014-02-12

Rubyにおけるドット記法と二重コロン記法についてのメモ.

#ドット記法
rubyにおけるドット記法とは,メソッド呼び出しに利用される.
形式的には, レシーバ.メソッド という形を用いる.

dot.rb
class Dot
  def method
    puts "Dot"
  end
end

d = Dot.new
d.method
# Dot

#二重コロン記法
二重コロン記法も上記のドット記法と同様にメソッド呼び出しに利用される.
形式的には, レシーバ::メソッド という形を用いる.

colon.rb

class Colon
  def method
    puts "Colon"
  end
end

c = Colon.new
c::method
# Colon

#ドット記法と二重コロン記法の違い
上記に沿えば,ドット記法も二重コロン記法も同じように利用されるかと思います.
次に記す例は,net/httpライブラリを利用して,ドキュメントを取得するためのコードです.
このコードは,二重コロン記法を用いて記述します.

net.rb
require 'net/http'
require 'uri'

url = URI::parse("http://www.ktaro.info/")
http = Net::HTTP::start(url::host,url::port)
doc = http::get(url::path)
puts doc::body
# ドキュメントが表示

では,続いて先ほどのコードをドット記法に書き換えます.

net.rb
require 'net/http'
require 'uri'

url = URI.parse("http://www.ktaro.info/")
http = Net.HTTP.start(url.host,url.port)
doc = http.get(url.path)
puts doc.body
# エラーが発生
# net.rb:5:in `<main>': undefined method `HTTP' for Net:Module (NoMethodError)

どうやら5行目にてエラーが発生しています.
エラー内容は, Netモジュール内にHTTPというメソッドが定義されていない というものです.

##結論
上記のソースコードは,ドット記法と二重コロン記法の違い以外に変わりはありません.
なぜ2つのコードでそれぞれ違う結果になったかと言うと,二重コロン記法が メソッド呼び出しだけでなく,定数の呼び出しにも利用される からです.
ドット記法は,あくまでもメソッドの呼び出しに利用されます.
Rubyでは, クラスやモジュールも定数 として扱われます.

先ほどのドット記法で記述されたコードでは,Netモジュール内のHTTPクラスにアクセスしようとしましたが,ドット記法だったために,メソッドの呼び出しを行い,その結果メソッドが定義されていないというエラーが発生したというわけです.

net.rb(ドット記法[メソッド呼び出し]+二重コロン記法[クラスアクセス])
require 'net/http'
require 'uri'

url = URI.parse("http://www.ktaro.info/")
http = Net::HTTP.start(url.host,url.port)
doc = http.get(url.path)
puts doc.body
# ドキュメントが表示

#まとめ
今回の記事のまとめは,以下の通りです.

  • ドット記法は,メソッド呼び出し
  • 二重コロン記法は,メソッド呼び出し+定数呼び出し
  • Rubyでは,クラスやモジュールも定数として扱われる.
316
248
1

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
316
248

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?