メソッドの名前を変更すると、オーバーロードされなくなります。それ自体で、オーバーロードは必ずしもコードの可読性を低下させるわけではありませんが、構文が明確でない場合、実装を追跡するのが難しくなります。
多くの言語は、パラメーターがオプションであり、オプションのパラメーターのデフォルトが暗示される機能へのインターフェースを提示する手段として、メソッドのオーバーロードを使用します。これは、メソッド宣言でデフォルトのパラメーター構文をサポートしていない言語に特に当てはまります。
これを行う:
void MyMethod(int param1, int param2 = 10)
{
...
}
これを行うことからあなたを救います:
void MyMethod(int param1)
{
MyMethod(param1, Param2Default);
}
void MyMethod(int param1, int param2)
{
....
}
どちらがより読みやすいかは、あなた次第です。個人的には、特にパラメーターリストが少し長くなっている場合、2番目のオプションを好みますが、API全体で一貫している限り、それは実際には重要ではないと思います。
オーバーロードの難しさは、基本的に同じことを行う関数が必要な場合、およびパラメーターリストを同じにし、戻り値の型を異なるようにする場合に発生します。ほとんどの言語は、同じ名前の異なる戻り値型を持つ2つのメソッドを区別する方法を知りません。この時点で、ジェネリックを使用するか、パラメータインターフェイスを変更するか、メソッドの名前を変更して戻り値の型の違いを示すことを検討する必要があります。このような状況に対処するためのシンプルで明確な命名スキームに決着しないと、読みやすさが大きな問題になる可能性があります。
オーバーロードされたメソッドに名前を付けるGetSomething()
とGetSomethingEx()
、メソッド間の違いが何であるかについては特に言及しません。特に、戻り値のタイプだけが違います。一方、GetSomethingAsInt()
及びGetSomethingAsString()
方法は、厳密に過負荷をして、しばらくしていないものについて、もう少しあなたを教えて、2つの方法が同様のことを行うことを示している、まだ別の値の型を返すん。メソッドに名前を付けることのできる他の方法があることは知っていますが、ポイントを説明するために、これらの大雑把な例はすべきです。
OPの例では、メソッドのパラメーターが異なるため、名前の変更は厳密には必要ありませんが、メソッドをより具体的に名前を付けると少しわかりやすくなります。最終的には、ユーザーに提示したいインターフェースのタイプに本当に帰着します。読みやすさに関するあなた自身の認識だけに基づいて、過負荷にしないかどうかの決定を下すべきではありません。メソッドをオーバーロードすると、たとえばAPIインターフェースが単純化され、開発者が覚えておく必要のあるメソッドの数を減らすことができます。一方、インターフェースを難読化すると、開発者がメソッドのドキュメントを読んでどのフォームを理解する必要があるかがわかります使用するメソッドの種類。ただし、多くの同様でありながら説明的な名前のメソッドがあると、目的に関してメソッド名を読むだけでより明確になります。