【Ruby3.x】Module::public_method_defined?()メソッドの使い方
public_method_defined?メソッドの使い方について、初心者にもわかりやすく解説します。
基本的な使い方
public_method_defined?メソッドは、指定された名前の公開メソッドが、そのメソッドを呼び出したクラスまたはモジュールに定義されているかを確認し、その真偽を返すメソッドです。このメソッドはRubyのModuleクラスに属しており、クラスやモジュール自身に対して呼び出すことができます。
引数には、確認したいメソッド名をシンボル(例: :method_name)または文字列(例: "method_name")で渡します。戻り値は、指定されたメソッドが公開メソッドとして存在すればtrueを、存在しなければfalseを返します。
ここで「公開メソッド」とは、Rubyのアクセス制御においてpublicとして定義されているメソッドを指します。protectedやprivateとして定義されたメソッドは対象外となり、public_method_defined?メソッドではfalseを返します。
さらに、このメソッドは、レシーバであるクラスやモジュール自身に直接定義されている公開メソッドだけでなく、そのクラスが継承しているスーパークラスや、インクルードしているモジュールで定義されている公開メソッドも確認の対象とします。これにより、外部から呼び出し可能なメソッドの有無を正確に判断することができます。
似た機能を持つmethod_defined?メソッドが存在しますが、public_method_defined?メソッドはアクセス制御がpublicのメソッドのみを厳密にチェックする点で異なります。この特性により、APIとして提供されている機能の有無を特定する際などに特に有用です。
構文(syntax)
1class MyFeature 2 def do_something 3 # ... 4 end 5end 6 7MyFeature.public_method_defined?(:do_something)
引数(parameters)
method_name
- method_name: シンボルまたは文字列 定義されているパブリックメソッドの名前
戻り値(return)
Boolean
指定された名前の公開メソッドがモジュール内に定義されている場合に true を、そうでない場合に false を返します。