Si vous renommez une méthode, elle ne sera plus surchargée. En soi, la surcharge ne rend pas nécessairement le code moins lisible, mais elle peut rendre l'implémentation plus difficile à suivre si la syntaxe n'est pas claire.
De nombreux langages utilisent la surcharge de méthode comme moyen de présenter une interface vers des fonctionnalités où les paramètres peuvent être facultatifs et les valeurs par défaut des paramètres facultatifs sont implicites. Cela est particulièrement vrai pour les langues qui ne prennent pas en charge une syntaxe de paramètre par défaut dans la déclaration de méthode.
Ce faisant:
void MyMethod(int param1, int param2 = 10)
{
...
}
vous évite de le faire:
void MyMethod(int param1)
{
MyMethod(param1, Param2Default);
}
void MyMethod(int param1, int param2)
{
....
}
Quant à ce qui est plus lisible, cela dépend vraiment de vous. Personnellement, je préfère la deuxième option, en particulier lorsque la liste des paramètres devient un peu longue, mais je suppose que cela n'a pas vraiment d'importance tant que vous êtes cohérent tout au long de votre API.
La difficulté de surcharge survient lorsque vous voulez des fonctions qui font essentiellement la même chose et où vous voulez que les listes de paramètres soient les mêmes, mais que les types de retour soient différents. La plupart des langues ne savent pas différencier deux méthodes nommées de la même manière, mais avec des types de retour différents. À ce stade, vous devez penser à utiliser des génériques, à modifier l'interface des paramètres ou à renommer l'une de vos méthodes pour indiquer la différence de type de retour. C'est là que la lisibilité peut devenir un gros problème, si vous ne vous contentez pas d'un schéma de nommage simple et clair pour faire face à des situations comme celle-ci.
Nommer vos méthodes surchargées GetSomething()
et GetSomethingEx()
ne va pas en dire long sur les différences entre vos méthodes, en particulier si ce sont les types de retour qui sont les seules différences entre elles. D'un autre côté, GetSomethingAsInt()
et GetSomethingAsString()
vous en dire un peu plus sur ce que font les méthodes, et bien qu'il ne s'agisse pas strictement d'une surcharge, indiquez que les deux méthodes font des choses similaires, mais retournent des types de valeurs différents. Je sais qu'il existe d'autres façons de nommer les méthodes, mais pour illustrer ce point, ces exemples grossiers devraient le faire.
Dans l'exemple OPs, le renommage n'est pas strictement nécessaire car les paramètres de méthode sont différents, mais cela rend les choses un peu plus claires pour nommer une méthode plus spécifiquement. En fin de compte, cela se résume vraiment au type d'interface que vous souhaitez présenter à vos utilisateurs. La décision de ne pas surcharger ne doit pas être prise uniquement en fonction de votre propre perception de la lisibilité. La surcharge des méthodes peut par exemple simplifier une interface API et réduire le nombre de méthodes dont un développeur peut avoir besoin de se souvenir, d'autre part, elle peut obscurcir l'interface à un degré qui oblige ensuite un développeur à lire la documentation de la méthode pour comprendre quelle forme de méthode à utiliser, alors que le fait d'avoir un certain nombre de méthodes nommées de manière similaire mais descriptive peut rendre plus évident la simple lecture d'un nom de méthode quant à son objectif.