クラスメソッドで静的
Ruby基礎とクラスメソッドの概要
Rubyはオブジェクト指向言語であり、クラスとインスタンスが基本構成要素です。クラスメソッドはクラス自体に属し、インスタンスを生成せずに呼び出せる機能です。Rubyでは def self.foo という形で定義し、クラス名.メソッド名で呼び出します。クラスメソッドは、クラス単位で共通の処理をまとめる際に便利で、ユーティリティクラスとして頻繁に利用されます。
self.methodでクラス単位のユーティリティを作る
Ruby 2.7 以降、self.method を使うと、クラスメソッドを動的に取得・呼び出しできます。以下は簡単な例です。
class MathUtil
def self.add(a, b)
a + b
end
def self.method(name)
if name == :add
method(:add)
else
nil
end
end
end
# 呼び出し
MathUtil.method(:add).call(3, 5) # => 8
このように self.method を利用すると、クラス単位でメソッドを動的に扱えるため、テストやメタプログラミングが容易になります。ユーティリティクラスはインスタンス不要で、クラスメソッドだけで完結する設計が一般的です。
インスタンス不要・インスタンス変数不可の静的メソッド設計
インスタンス不要でインスタンス変数を使わない設計は、状態を持たない純粋関数的なメソッドを作る際に有効です。Ruby では module を使って静的メソッドをまとめることもできます。以下はモジュールを使った例です。
module StringUtil
def self.reverse(str)
str.reverse
end
def self.camelize(str)
str.split('_').map(&:capitalize).join
end
end
# 呼び出し
StringUtil.reverse('hello') # => 'olleh'
StringUtil.camelize('my_name') # => 'MyName'
このようにモジュール内のメソッドはインスタンス生成せずに呼び出せ、インスタンス変数を持たないため、テストが容易で副作用がありません。静的メソッドとして設計することで、クラス単位での再利用性が高まり、コードベース全体の可読性と保守性が向上します。
コメント
コメントを投稿