Vad är funktionsöverbelastning?

Funktionsöverbelastning är en funktion i många programmeringsspråk där flera metoder kan skapas med samma namn men med olika ingångsparametrar eller returtyper. Detta är ett vanligt inslag i objektorienterad programmering; särskilt konstruktörer kan ha flera olika överbelastade varianter. I huvudsak är överbelastning av funktioner 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 överbelastas enkelt eftersom de inte har någon uttrycklig returtyp specificerad, så att det är giltig överbelastning att ändra ingångsparametrarna för en konstruktör.

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 kallas "lägg till" som tar in två hela siffror. Syftet med denna funktion är ganska uppenbart; det är avsett att hitta summan av två heltal.

Om man ville hitta summan av två flottörer eller decimaltal skulle denna funktion dock inte vara tillämplig. Så, en andra överbelastad funktion skulle vara nödvändig, definierad som en funktion som kallas "lägg till" som tar sin två inlägg. Funktionerna gör i stort sett samma sak, men överbelastning av funktioner ä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 sina ingångsparametrar och dess returtyp. Med det föregående exemplet kan man överväga om båda överbelastade "lägg till" -funktionerna hade en ogiltig returtyp; det vill säga de returnerade ingenting. Detta skulle fortfarande vara giltig överbelastning av funktionen, men returtyperna för de två metoderna kan också ändras. I en annan giltig instans av överbelastning kan "lägg till" -funktionen som tar två hela siffror returnera den hela siffran och "lägg till" -funktionen som tar två decimaler kan returnera den decimalsumman.

Att bara ändra returtypen för en funktion anses dock inte som giltig överbelastning av funktionen. 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 kallas korrekt. Om man till exempel har en överbelastad funktion som har ett helt nummer som sin inmatningsparameter, och en annan som har ett decimaltal som en parameter, skulle det vara väldigt enkelt för någon att av misstag ringa decimaltalsfunktionen istället för hela sifferfunktionen , 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 man vara mycket försiktig för att säkerställa att rätt överbelastad funktion kallas vid rätt tidpunkter.

Funktionsöverbelastning är användbar för att skapa relaterade funktioner med olika inmatningstyper, och det ger kod mycket flexibilitet. Ett slutligt övervägande för överbelastade funktioner är att adekvat kommentering är nödvändig. Även om det kan vara tydligt genom olika inputparametrar vilken version av en överbelastad funktion som är rätt för en viss situation, är det kanske inte alltid klart vad funktionen gör annorlunda än dess andra överbelastade partners.

ANDRA SPRÅK

Hjälpte den här artikeln dig? Tack för feedbacken Tack för feedbacken

Hur kan vi hjälpa? Hur kan vi hjälpa?