最近、スタティックメソッドの使いどころについて考えていた。結局「スタティックメソッドのラッパ」以外の用途が思いつかなかった。
スタティックメソッドA内で、インスタンスBのインスタンスメソッドを呼びたくなったとしたら、そもそもメソッドAはインスタンスBに属してしかるべきだ。簡単にいえば、Adder.add(a, b) はおかしくて、Foo.new(a).add(b) とすべきということだ。
なぜ「すべき」なのか。それがオブジェクト指向だからだ。手続き型のコードが書きたければ、オブジェクト指向言語を使う必要はない。
これまでの話を裏返せば、メソッド内でインスタンスメソッドを呼ばない場合にだけ、スタティックメソッドを使ってよいということになる。すなわち「スタティックメソッドのラッパ」である。
いったい、スタティックメソッドのラッパが欲しくなる場面がどれだけあるだろうか。
開発中のコードを上記の指針でリファクタリングしたら、スタティックメソッドが一切なくなった。よかった。