RubyでInterface
そもそもRubyにInterfaceが必要とか、必要じゃないとかの議論は置いておいて、 無いのであれば、類似したことをやりたい場合はどうすればいいのかが気になって調べてた。
1. まずは簡単にやってみる
module TestInterface def method1 raise NotImplementError end end class SomeClass include TestInterface def method1 puts "hoge" end end SomeClass.new.method1
実装はココから拝借。
愚直にmoduleで書いたほうが良いんじゃないかなぁと思っている。 そのほうが明示的でわかりやすいというか… 業務でどうしても欲しい場合は、消去法でコレで良いんじゃないんですか。という感じ。
2. Gem使う
その名もズバリなInterFaceというGemがあるので、コレを使ってみることにする。
実装もここから読めるし、100行もないくらいの短いコードなので、興味がある人は読んでみて欲しい。 interface/interface.rb at master · djberg96/interface · GitHub
require 'rubygems' require 'interface' TestInterface = interface{ required_methods :method1 } class SomeClass def method1 puts "hoge" end implements TestInterface end SomeClass.new.method1
Interfaceをそれっぽく、かつRubyっぽい感じ*1でかける。 ただ一番しっくりこないのは、implements*2を必ずメソッドの定義よりも下に書かないと動かないことだろう。 多分これは実装上の都合なだけな気がするので、もしかすると修正されて、メソッド定義よりも上に書いてみても大丈夫になるかもしれない。 業務で使うのはあまりオススメ出来ない…
まとめ
結局少し試してみたけど、これならやらんでもいいかな…となってしまった。