メソッドには対象の名前を入れるべきか?

いま、電灯を表すLightというクラスがあったとします。

Light myLight = new Light();

このとき、電灯をつけるメソッド名として

  1. myLight.turnLightOn();
  2. myLight.turnOn();

のどちらを使う方が良いのでしょうか?

1番のturnLightOn()の利点は、メソッド名を見るだけで何をturn onするメソッドかわかることです。2番のturnOn()の利点は、簡潔であるということです。
turnOn()の場合、もし変数名が適切につけられていない場合、その行だけを見て何をturn onするのかを知ることはできません。myLight.turnOn()ならばわかりますが、a.turnOn()だとわかりません。私は、メソッドのわかりやすさが利用する側の変数名に依存するのはよくないと思います。そこでturnLightOn()のように、メソッド名に対象が入っている方を採用することにします。

次の例としてElectricEnglishJapaneseDictionary(電子英和辞書)クラスを考えます。

ElectricEnglishJapaneseDictionary myEJDict = new ElectricEnglishJapaneseDictionary();

myEJDictの電源を入れるには、メソッド名に対象を入れるならば、次のように書くことができます。

  • myEJDict.turnElectricEnglishJapaneseDictionaryOn();

かなり長くなりました。確かにわかりやすいですが、冗長な気がします。もし対象を入れないと次のように書くことができます。

  • myEJDict.turnOn();

これを見ると、メソッド名には対象を入れない方が短いため、読みやすくなっています。読みやすさは理解しやすさにつながります。しかし、これは変数名を適切につけている場合に限ります。
まとめると

  1. メソッド名に対象を含むと、そのメソッドを呼び出す行だけを見たとき、何が起こるのか理解しやすい。
  2. 対象の名前が長い場合、メソッド名が冗長になり、読みにくくなり、理解しにくくなる場合がある。
  3. インスタンスを格納する変数の名前を適切にすることで、メソッド名に対象を含まない場合でも、理解しやすくすることが可能である。