Si cambia el nombre de un método, ya no se sobrecargará. En sí mismo, la sobrecarga no necesariamente hace que el código sea menos legible, sin embargo, puede hacer que la implementación sea más difícil de seguir si la sintaxis no es clara.
Muchos lenguajes usan la sobrecarga de métodos como un medio para presentar una interfaz a la funcionalidad donde los parámetros pueden ser opcionales y los valores predeterminados para los parámetros opcionales están implícitos. Esto es particularmente cierto para los idiomas que no admiten una sintaxis de parámetros predeterminada en la declaración del método.
Entonces haciendo esto:
void MyMethod(int param1, int param2 = 10)
{
...
}
te salva de hacer esto:
void MyMethod(int param1)
{
MyMethod(param1, Param2Default);
}
void MyMethod(int param1, int param2)
{
....
}
En cuanto a cuál es más legible, eso realmente se reduce a usted. Personalmente, prefiero la segunda opción, especialmente cuando la lista de parámetros se está alargando un poco, pero supongo que en realidad no importa siempre que sea coherente en toda su API.
La dificultad con la sobrecarga se produce cuando desea funciones que hacen esencialmente lo mismo y donde desea que las listas de parámetros sean las mismas, pero los tipos de retorno sean diferentes. La mayoría de los idiomas no saben cómo diferenciar entre dos métodos con el mismo nombre, pero con diferentes tipos de retorno. En este punto, debe pensar en usar genéricos, cambiar la interfaz de parámetros o cambiar el nombre de uno de sus métodos para indicar la diferencia en el tipo de retorno. Aquí es donde la legibilidad puede convertirse en un gran problema, si no se conforma con un esquema de nombres simple y claro para hacer frente a situaciones como esta.
Nombrar sus métodos sobrecargados GetSomething()
y GetSomethingEx()
no va a decir mucho sobre cuáles son las diferencias entre sus métodos, especialmente si son los tipos de retorno las únicas diferencias entre ellos. Por otro lado, GetSomethingAsInt()
yGetSomethingAsString()
contarle un poco más sobre lo que están haciendo los métodos, y aunque no es estrictamente una sobrecarga, sí indica que los dos métodos hacen cosas similares, pero devuelven diferentes tipos de valores. Sé que hay otras formas de nombrar métodos, sin embargo, para ilustrar el punto, estos ejemplos crudos deberían servir.
En el ejemplo de OP, el cambio de nombre no es estrictamente necesario porque los parámetros del método son diferentes, sin embargo, hace que las cosas sean un poco más claras para nombrar un método más específicamente. Al final, todo se reduce al tipo de interfaz que desea presentar a sus usuarios. La decisión de no sobrecargar no debe basarse únicamente en su propia percepción de legibilidad. Los métodos de sobrecarga pueden, por ejemplo, simplificar una interfaz API y reducir la cantidad de métodos que un desarrollador puede necesitar recordar, por otro lado, puede ofuscar la interfaz en un grado que luego requiere que un desarrollador lea la documentación del método para comprender qué formulario del método a usar, mientras que tener una cantidad de métodos nombrados de manera similar pero descriptiva puede hacer que sea más evidente simplemente leyendo un nombre de método en cuanto a su propósito.