Vad är funktionsöverbelastning?

Funktionsöverbelastning är en egenskap hos många programmeringsspråk där flera metoder kan skapas med samma namn men med olika inmatningsparametrar eller returtyper. Detta är en vanlig egenskap inom objektorienterad programmering; Speciellt konstruktörer kan ha flera olika överbelastade varianter. I grund och botten är funktionsöverbelastning användbar när två funktioner gör mycket liknande saker och kan ta flera typer av input för att göra det. Konstruktörer kan lätt överbelastas eftersom de inte har någon explicit returtyp specificerad, så att helt enkelt ändra indataparametrarna för en konstruktör skulle vara giltig överbelastning.

Det första sättet på vilket en funktion kan överbelastas är genom att ändra dess ingångsparametrar. Till exempel kan man överväga en funktion som heter ”lägg till” som tar två heltal som indata. Syftet med denna funktion är ganska uppenbart; det är tänkt att hitta summan av två heltal.

Om man ville hitta summan av två flytningar, eller decimaltal, skulle dock denna funktion inte vara tillämplig. Så en andra överbelastad funktion skulle vara nödvändig, definierad som en funktion som kallas ”add” som tar två flytningar som ingång. Funktionerna gör i stort sett samma sak, men funktionsöverbelastning är nödvändig eftersom deras ingångar är väsentligt olika.

Det andra sättet på vilket en funktion kan överbelastas är att ändra både dess inmatningsparametrar och dess returtyp. Med hjälp av föregående exempel kan man överväga om båda överbelastade ”lägg till”-funktionerna hade en void-returtyp; det vill säga de gav ingenting tillbaka. Detta skulle fortfarande vara giltig funktionsöverbelastning, men returtyperna för de två metoderna kan också ändras. I ett annat giltigt fall av överbelastning, kan ”lägg till”-funktionen som tar två heltal returnera hela talsumman, och ”lägg till”-funktionen som tar två decimaltal kan returnera den decimala summan.

Att bara ändra returtypen för en funktion anses dock inte vara överbelastning av giltig funktion. Att endast ändra returtypen för en funktion resulterar i tvetydighet, eftersom det inte framgår av metodsignaturen vilken returtyp som önskas. Parametrar kan också definieras tvetydigt, så det är mycket viktigt att överbelastade funktioner anropas korrekt. Till exempel, om en har en överbelastad funktion som har ett heltal som sin indataparameter, och en annan som har ett decimaltal som parameter, skulle det vara mycket lätt för någon att av misstag anropa decimaltalsfunktionen istället för heltalsfunktionen , eller vice versa, eftersom de har samma namn. Tvetydiga parametrar som dessa bör undvikas om möjligt, och om de inte kan vara det, bör stor noggrannhet iakttas för att säkerställa att rätt överbelastad funktion anropas vid rätt tidpunkter.

Funktionsöverbelastning är användbart för att skapa relaterade funktioner med olika inmatningstyper, och det ger koden mycket flexibilitet. En sista övervägande om överbelastade funktioner är att adekvata kommentarer är avgörande. Även om det kan vara tydligt genom olika inmatningsparametrar vilken version av en överbelastad funktion som är rätt för en viss situation, kanske det inte alltid är tydligt exakt vad funktionen gör annorlunda än sina andra överbelastade partners.