モジュールを関数のように使う

広告

モジュールはクラスのようにオブジェクトを作成することは出来ませんので、モジュールの使用方法は関数のようにモジュール内に定義されたメソッドを実行するか、又はクラスの中にインクルードするかの二通りがあります。ここでは関数のように使用する方法を確認します。

例として次のようなモジュールを作成します。

module SuuchiModule
  def minValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end

  def maxValue(x, y)
    if x > y
      return x
    else
      return y
    end
  end
end

このモジュールは数値関係のメソッドを定義したモジュールとなっています。

モジュールを関数のように実行するにはモジュール内のメソッドをモジュール関数として実行できるように設定する必要があります。設定は次のように行います。

module_function :メソッド名

「module_function」の後にコロン(:)の後にメソッド名を記述します。先ほどの例であれば次のように記述します。

module SuuchiModule
  def minValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end

  def maxValue(x, y)
    if x > y
      return x
    else
      return y
    end
  end

  module_function :minValue
  module_function :maxValue
end

これで「minValue」メソッドと「maxValue」メソッドは関数のように実行することが出来ます。

次に実行が許可されたメソッドを実行するには次のように実行します。

モジュール名.メソッド名

モジュールはクラスのようにオブジェクトを作成出来ませんので、このようにモジュール名を指定してメソッドを実行します。

module SuuchiModule
  def minValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end

  def maxValue(x, y)
    if x > y
      return x
    else
      return y
    end
  end

  module_function :minValue
  module_function :maxValue
end

print(SuuchiModule.minValue(10, 8), "¥n")
print(SuuchiModule.maxValue(10, 8), "¥n")

以上のようにモジュールの中で定義されたメソッドを関数のように呼び出すことが出来ます。

モジュールをインクルードする

前述したようにモジュールに含まれるメソッドは「モジュール名.メソッド名」のように実行します。ただ実行する回数が多い場合などは先にモジュールをインクルードしておくことで単に「メソッド名」の形で実行することも出来ます。

モジュールをインクルードするには次のように記述します。

include モジュール名

「include」文を記述してモジュールをインクルードした後であればモジュールに含まれるメソッドを「メソッド名」と言う形式で実行することが出来ます。

module SuuchiModule
  def minValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end

  def maxValue(x, y)
    if x > y
      return x
    else
      return y
    end
  end

  module_function :minValue
  module_function :maxValue
end

include SuuchiModule
print(minValue(10, 8), "¥n")
print(maxValue(10, 8), "¥n")

サンプルプログラム

では実際にサンプルプログラムを作成してみます。

ModuleTest2.rb

module SuuchiModule
  def minValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end

  def maxValue(x, y)
    if x > y
      return x
    else
      return y
    end
  end

  module_function :minValue
  module_function :maxValue
end

include SuuchiModule
print(minValue(10, 8), "¥n")
print(maxValue(10, 8), "¥n")

上記を実行すると次のように表示されます。

モジュールを関数のように使う

( Written by Tatsuo Ikura )