モジュールのメソッドを関数のように呼び出す

モジュールはクラスの中にインクルードして利用することもできますが、モジュールの中に定義したメソッドを関数のように呼び出して使うこともできます。ここでは Ruby でモジュールのメソッドを関数のように呼び出す方法について解説します。

(2022 年 10 月 13 日公開 / 2022 年 10 月 22 日更新)

モジュールのメソッドを関数のように呼び出す

モジュールを関数のように呼び出して使う方法です。例えば次のようなモジュールを定義します。

module CalcModule
  def getMinValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end
end

このモジュールではメソッドを一つ定義しています。このメソッドをモジュールの外から呼び出して利用するには、モジュールの中に次のような記述を追加します。

module_function :メソッド名

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

module CalcModule
  def getMinValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end

  module_function :getMinValue
end

これで getMinValue メソッドは外部から関数のように呼び出して実行できます。

次にモジュールの中のメソッドを呼び出すには次のように行います。

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

モジュールはクラスのようにインスタンスを作成できませんので、このようにモジュール名を指定してメソッドを実行します。

module CalcModule
  def getMinValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end

  module_function :getMinValue
end

puts(CalcModule.getMinValue(10, 8))
puts(CalcModule.getMinValue(7, 15))

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

モジュールをインクルードしてからメソッドを呼び出す

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

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

include モジュール名

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

先ほどのサンプルは次のように記述することができます。

module CalcModule
  def getMinValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end

  module_function :getMinValue
end

include CalcModule

puts(getMinValue(10, 8))
puts(getMinValue(7, 15))
サンプルコード

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

# encoding: UTF-8

module CalcModule
  def getMinValue(x, y)
    if x < y
      return x
    else
      return y
    end
  end

  module_function :getMinValue
end

puts(CalcModule.getMinValue(10, 8))
puts(CalcModule.getMinValue(7, 15))

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

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

-- --

Ruby でモジュールのメソッドを関数のように呼び出す方法について解説しました。

( Written by Tatsuo Ikura )

広告
Profile
profile_img

著者 / TATSUO IKURA

プログラミングや開発環境構築の解説サイトを運営しています。