Ruby拡張で便利機能
ActiveSupportの便利機能群
Ruby on Rails のコアライブラリである ActiveSupport は、日常的に使う多くの拡張機能を提供しています。blank? と present? はその代表例で、オブジェクトが空かどうかを簡潔に判定できます。例えば、nil.blank? は true を返し、"" も同様です。逆に present? は blank? の否定です。これらは文字列だけでなく、配列やハッシュ、数値にも適用可能です。
さらに try メソッドは、オブジェクトが nil でない場合にのみメソッドを呼び出し、nil のときは nil を返します。これにより、ネストしたオブジェクトの安全なアクセスが容易になります。
user.try(:profile).try(:avatar_url) #=> nil もしくは URL
これらの機能は、Rails アプリケーションだけでなく、純粋な Ruby スクリプトでも require 'active_support/core_ext' を追加することで利用できます。
拡張メソッドで実現するRuby応用
Ruby の柔軟性は、既存クラスに対して拡張メソッドを追加できる点にあります。例えば、String クラスに to_titlecase を追加すると、文字列をタイトルケースに変換できます。
class String
def to_titlecase
split.map(&:capitalize).join(' ')
end
end
"hello world".to_titlecase #=> "Hello World"
このように拡張メソッドを使うことで、コードの可読性と再利用性が向上します。さらに、ActiveSupport の blank? や present? を組み合わせると、入力チェックを簡潔に書けます。
Core ExtensionとしてのInteger拡張
数値型である Integer に対して便利なメソッドを追加することで、数値操作を直感的に行えるようになります。以下は Integer に to_fahrenheit と to_celsius を追加した例です。
class Integer
def to_celsius
self * 5 / 9
end
def to_fahrenheit
self * 9 / 5 + 32
end
end
32.to_celsius #=> 0
0.to_fahrenheit #=> 32
このような Core Extension は、プロジェクト全体で統一した数値表現を提供し、計算ロジックを簡潔に保つために有効です。Ruby のモジュールを使って、必要に応じて拡張を切り替えることも可能です。
コメント
コメントを投稿