Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
236
Help us understand the problem. What is going on with this article?
@ktarow

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

More than 5 years have passed since last update.

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では,クラスやモジュールも定数として扱われる.
236
Help us understand the problem. What is going on with this article?
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away

Comments

No comments
Sign up for free and join this conversation.
Sign Up
If you already have a Qiita account Login
236
Help us understand the problem. What is going on with this article?