Hvad er funktionsoverbelastning?
Funktionoverbelastning er en funktion i mange programmeringssprog, hvor flere metoder kan oprettes med samme navn, men med forskellige inputparametre eller returtyper. Dette er et fælles træk i objektorienteret programmering; især konstruktører kan have flere forskellige overbelastede varianter. Grundlæggende er funktionsoverbelastning nyttig, når to funktioner gør meget ens ting og kan tage flere typer input for at gøre det. Konstruktører kan let overbelastes, fordi de ikke har angivet nogen eksplicit returtype, så det er gyldig overbelastning at ændre indgangsparametrene til en konstruktør.
Den første måde, hvorpå en funktion kan overbelastes, er ved at ændre dens inputparametre. For eksempel kan man overveje en funktion kaldet "tilføj", der indtaster to hele tal. Formålet med denne funktion er temmelig indlysende; det er beregnet til at finde summen af to hele tal.
Hvis man ønskede at finde summen af to flydere eller decimaler, er denne funktion dog ikke relevant. Så en anden overbelastet funktion ville være nødvendig, defineret som en funktion kaldet "tilføj", der tager sine to flyder som input. Funktionerne gør i det væsentlige den samme ting, men funktionsoverbelastning er nødvendig, fordi deres input er markant forskellige.
Den anden måde, hvorpå en funktion kan overbelastes, er at ændre både dens inputparametre og dens returtype. Ved hjælp af det foregående eksempel kan man overveje, om begge overbelastede "tilføj" -funktioner havde en annulleret returtype; de returnerede intet. Dette ville stadig være gyldig funktionsoverbelastning, men returtyperne for de to metoder kunne også ændres. I et andet gyldigt tilfælde af overbelastning kunne "tilføj" -funktionen, der tager to hele tal, returnere hele heltalssummen, og "tilføj" -funktionen, der tager to decimaler, kunne returnere denne decimalantal.
Ved blot at ændre en returtype for en funktion betragtes det imidlertid ikke som gyldig funktionsoverbelastning. Ændring af kun en returtype for en funktion resulterer i tvetydighed, fordi det ikke fremgår af metodesignaturen, hvilken returtype der ønskes. Parametre kan også defineres tvetydigt, så det er meget vigtigt, at overbelastede funktioner kaldes korrekt. For eksempel, hvis man har en overbelastet funktion, der har et helt tal som sin inputparameter, og en anden, der har et decimalnummer som en parameter, ville det være meget let for nogen ved et uheld at kalde decimalnummerfunktionen i stedet for hele nummerfunktionen , eller omvendt, fordi de har samme navn. Tvetydige parametre som disse bør om muligt undgås, og hvis de ikke kan være det, skal man være meget omhyggelig med at sikre, at den korrekte overbelastede funktion kaldes til de rette tidspunkter.
Funktionoverbelastning er nyttig til at oprette relaterede funktioner med forskellige inputtyper, og det giver kode en masse fleksibilitet. En sidste overvejelse ved overbelastede funktioner er, at tilstrækkelig kommentering er vigtig. Selvom det måske er klart ved at afvige inputparametre, hvilken version af en overbelastet funktion der passer til en bestemt situation, er det måske ikke altid klart, nøjagtigt hvad funktionen gør anderledes end dens andre overbelastede partnere.