Se si rinomina un metodo, non verrà più sovraccaricato. Di per sé, il sovraccarico non rende necessariamente il codice meno leggibile, tuttavia può rendere più difficile seguire l'implementazione se la sintassi non è chiara.
Molte lingue usano il metodo di overloading come mezzo per presentare un'interfaccia alla funzionalità in cui i parametri possono essere opzionali e sono implicite impostazioni predefinite per i parametri opzionali. Ciò è particolarmente vero per le lingue che non supportano una sintassi dei parametri predefinita nella dichiarazione del metodo.
Quindi facendo questo:
void MyMethod(int param1, int param2 = 10)
{
...
}
ti salva dal fare questo:
void MyMethod(int param1)
{
MyMethod(param1, Param2Default);
}
void MyMethod(int param1, int param2)
{
....
}
Quanto a ciò che è più leggibile, ciò dipende davvero da te. Personalmente preferisco la seconda opzione, in particolare quando l'elenco dei parametri si sta allungando un po ', ma suppongo che non abbia importanza fino a quando sarai coerente in tutta l'API.
La difficoltà con il sovraccarico si presenta quando si desidera che funzioni che fanno sostanzialmente la stessa cosa e dove si desidera che gli elenchi di parametri siano gli stessi, ma i tipi di ritorno siano diversi. La maggior parte delle lingue non sa come distinguere tra due metodi denominati uguali, ma con tipi di ritorno diversi. A questo punto, devi pensare a utilizzare generics, modificare l'interfaccia dei parametri o rinominare uno dei tuoi metodi per indicare la differenza nel tipo restituito. È qui che la leggibilità può diventare un grosso problema, se non ti accontenti di uno schema di denominazione semplice e chiaro per affrontare situazioni come questa.
Denominare i metodi sovraccaricati GetSomething()
e GetSomethingEx()
non dirò molto su quali sono le differenze tra i metodi, in particolare se sono i tipi di restituzione le uniche differenze tra di loro. D'altra parte, GetSomethingAsInt()
e GetSomethingAsString()
ti dico qualcosa in più su ciò che stanno facendo i metodi, e sebbene non strettamente un sovraccarico, indica che i due metodi fanno cose simili, ma restituiscono tipi di valore diversi. So che ci sono altri modi in cui potresti nominare i metodi, tuttavia ai fini di illustrare il punto, questi esempi grezzi dovrebbero fare.
Nell'esempio dei PO, la ridenominazione non è strettamente necessaria perché i parametri del metodo sono diversi, tuttavia rende le cose un po 'più chiare nominare un metodo in modo più specifico. Alla fine, si riduce davvero al tipo di interfaccia che desideri presentare ai tuoi utenti. Una decisione sull'opportunità di non sovraccaricare non dovrebbe essere presa esclusivamente sulla base della propria percezione della leggibilità. I metodi di sovraccarico possono ad esempio semplificare un'interfaccia API e ridurre il numero di metodi che uno sviluppatore potrebbe aver bisogno di ricordare, d'altra parte, può offuscare l'interfaccia a un livello che richiede quindi allo sviluppatore di leggere la documentazione del metodo per capire quale forma del metodo da utilizzare, mentre avere un numero di metodi simili ma descrittivamente nominati può rendere più evidente la lettura di un nome di metodo sul suo scopo.