モジュールの定義
名前空間とメソッドです。
「モジュールの定義」はCoddyKit上の無料Ruby Academyレッスンです。 これはレッスン1/4です。 下記で完全なレッスンを無料で読むことができます。その後、ブラウザ内の組み込みコードエディタと24時間対応のAIチューターでハンズオン演習できます。 これはRuby Academy学習パスの一部であり、ウェブとCoddyKitアプリ全体で進捗が同期されます。 Ruby Academyコースには全4レッスンが含まれています。
名前空間とメソッド
モジュールは、メソッドと定数をまとめるコンテナです。クラスとは異なり、モジュールのインスタンスは作成できません。モジュールには、コードをまとめる(名前空間)役割と、振る舞いを共有する(ミックスイン)役割があります。
module Greeter
def self.hello
"Hello from the module"
end
end
puts Greeter.helloモジュールメソッド
self.を付けてメソッドを定義すると、ユーティリティ関数のようにモジュール上で直接呼び出せます。このようなメソッドは、モジュール関数と呼ばれることがよくあります。
module MathTools
def self.square(x)
x * x
end
end
puts MathTools.square(7)モジュール定数
モジュールには定数も保持できます。スコープ演算子::を使ってアクセスします。
module Physics
GRAVITY = 9.81
end
puts Physics::GRAVITYクラスの名前空間化
クラスをモジュールで包むと、名前の衝突を防げます。完全修飾名には::を使用します。
module Store
class Item
def initialize(name)
@name = name
end
def to_s
@name
end
end
end
puts Store::Item.new("Book")名前空間が重要な理由
2つのライブラリがどちらもLoggerを定義しているかもしれません。名前空間を使えば、Audio::LoggerとNetwork::Loggerのように分離でき、決して衝突しません。
module Audio
class Logger
def name; "audio logger"; end
end
end
module Network
class Logger
def name; "network logger"; end
end
end
puts Audio::Logger.new.name
puts Network::Logger.new.namemodule_function
module_functionを使うと、後続のメソッドをモジュール上でも、ミックスインしたときのプライベートなインスタンスメソッドとしても呼び出せるようになります。self.を繰り返し記述せずに済みます。
module Calc
module_function
def add(a, b)
a + b
end
end
puts Calc.add(2, 3)関連する定数をまとめる
モジュールは、関連する設定値を1つの分かりやすい名前の下に整理するのに適しています。
module Color
RED = "#FF0000"
GREEN = "#00FF00"
BLUE = "#0000FF"
end
puts Color::GREENネストしたモジュール
モジュールは別のモジュールの中にネストして、さらに整理できます。
module App
module Config
VERSION = "1.0"
end
end
puts App::Config::VERSIONモジュールの内容を一覧表示する
リフレクションメソッドを使うと、実行時にモジュールの定数やメソッドを調べられます。
module Settings
WIDTH = 80
HEIGHT = 24
end
p Settings.constantsモジュールはインスタンス化できない
名前付きモジュールに対してModule.newを実行しようとしても失敗します。モジュールにはインスタンス用のコンストラクタがないためです。モジュールは名前空間および振る舞いの入れ物であり、オブジェクトの設計図ではありません。
module Tools
end
begin
Tools.new
rescue NoMethodError => e
puts "Cannot instantiate: #{e.message}"
endまとめ
モジュールはコードを整理し、共有するために使います。
self.methodを使って呼び出し可能なモジュール関数を定義します。::でアクセスする定数を保持します。- クラスを名前空間化して衝突を防ぎます。
- モジュールをインスタンス化することはできません。
module Geometry
PI = 3.14159
def self.circle_area(r)
PI * r * r
end
end
puts Geometry.circle_area(2)理解度チェック
モジュールについての理解度を確認しましょう。
振り返り
モジュールの定義について学んだことを振り返りましょう。
- モジュールはメソッドと定数をまとめます。
self.methodで呼び出し可能なモジュール関数を定義します。::で定数やネストしたクラスにアクセスします。- 名前空間化によって名前の衝突を防ぎます。
module Util
def self.shout(s)
s.upcase + "!"
end
end
puts Util.shout("ruby")よくある質問
「モジュールの定義」レッスンは無料ですか?
はい。「モジュールの定義」の完全なテキストはこのウェブで無料で読めます。インタラクティブに演習し(組み込みコードエディタと24時間対応のAIチューター)、Ruby Academyコースの残りをアンロックするには、CoddyKit PROにアップグレードしてください。 Ruby Academyコースには全4レッスンが含まれています。
「モジュールの定義」で何を学びますか?
名前空間とメソッドです。 ブラウザで直接実行するハンズオンコードでRuby Academyを演習し、24時間対応のAIチューターがレッスンを進める中での質問に答えます。
Ruby Academyを始めるのに経験は必要ですか?
事前経験は必要ありません。CoddyKitのRuby Academyは初級者から上級者向けに構成されているため、ここから始めるか最初から始めて、自分のペースで進むことができます。 これはレッスン1/4です。
「モジュールの定義」レッスンにはどのくらい時間がかかりますか?
ほとんどのCoddyKitレッスンは約5~10分かかります。各レッスンはコンパクトでインタラクティブなので、着実に進歩し、ウェブとアプリ全体で正確に前回の場所から再開できます。
このRuby Academyレッスンでコードを書いて実行できますか?
はい。すべてのRuby Academyレッスンに組み込みコードエディタが含まれているため、ブラウザでリアルコードを書いて実行し、即座のAIフィードバックを取得できます。ローカル設定は不要です。