Если вы переименуете метод, он больше не будет перегружен. Сама по себе перегрузка не обязательно делает код менее читабельным, однако она может усложнить реализацию, если синтаксис не ясен.
Многие языки используют перегрузку методов как средство представления интерфейса функциональности, где параметры могут быть необязательными и подразумеваются значения по умолчанию для необязательных параметров. Это особенно верно для языков, которые не поддерживают синтаксис параметров по умолчанию в объявлении метода.
Так делаем это:
void MyMethod(int param1, int param2 = 10)
{
...
}
избавляет вас от этого:
void MyMethod(int param1)
{
MyMethod(param1, Param2Default);
}
void MyMethod(int param1, int param2)
{
....
}
Что касается того, что является более читабельным, то это действительно сводится к вам. Лично я предпочитаю второй вариант, особенно когда список параметров становится немного длиннее, но я полагаю, что это не имеет большого значения, если вы последовательны в своем API.
Трудность с перегрузкой возникает тогда, когда вы хотите, чтобы функции выполняли, по сути, одно и то же, и когда вы хотите, чтобы списки параметров были одинаковыми, но типы возвращаемых данных были разными. Большинство языков не знают, как различать два метода, названных одинаково, но с разными типами возврата. На этом этапе вам нужно подумать об использовании обобщений, изменении интерфейса параметров или переименовании одного из ваших методов, чтобы указать разницу в типе возвращаемого значения. Именно здесь удобочитаемость может стать большой проблемой, если вы не остановитесь на простой и понятной схеме именования для решения подобных ситуаций.
Присвоение имен перегруженных методов GetSomething()
и GetSomethingEx()
не будет много говорить о том, что различия между вашими методами, особенно если она является возвращаемые типы, которые только различия между ними. С другой стороны, GetSomethingAsInt()
иGetSomethingAsString()
расскажем вам немного больше о том, что делают методы, и хотя они не являются строго перегрузочными, они указывают на то, что оба метода выполняют схожие функции, но возвращают разные типы значений. Я знаю, что есть другие способы, которыми вы могли бы называть методы, однако для иллюстрации, эти грубые примеры должны подойти.
В примере с OP переименование не является строго необходимым, поскольку параметры метода различны, однако это немного упрощает наименование метода. В конце концов, все сводится к типу интерфейса, который вы хотите представить своим пользователям. Решение о том, не следует ли перегружать, не должно приниматься исключительно на основании вашего собственного восприятия читабельности. Перегрузка методов может, например, упростить интерфейс API и уменьшить количество методов, которые разработчик, возможно, должен запомнить, с другой стороны, он может запутать интерфейс до такой степени, которая затем требует, чтобы разработчик прочитал документацию метода, чтобы понять, какая форма метода для использования, в то время как наличие ряда аналогично, но описательно названных методов может сделать это более очевидным, просто читая имя метода относительно его цели.