Snelle functie-overbelasting (met voorbeelden)

In dit artikel leer je over functie-overbelasting, wanneer hebben we functie-overbelasting nodig en hoe je deze kunt overladen met voorbeelden.

Twee of meer functies met dezelfde naam, maar met verschillende argumenten, worden overbelaste functies genoemd.

Waarom hebben we functie-overbelasting nodig?

Stel je voor dat je een schietspel ontwikkelt waarbij de speler zijn vijanden kan aanvallen met een mes, een mes en een geweer. Uw oplossing voor de aanvalsfunctionaliteit is wellicht het definiëren van de acties in functies als:

 func attack() ( //… print("Attacking with Knife") ) func attack() ( //… print("Attacking with Blade") ) func attack() ( //… print("Attacking with Gun") ) 

Maar wanneer u het bovenstaande programma probeert uit te voeren, krijgt u een compilatietijdfout in Swift als 'attack ()' eerder hier gedeclareerd . Een andere oplossing is echter het definiëren van verschillende functienamen voor de specifieke functionaliteit, zoals:

 struct Knife ( ) struct Gun ( ) struct Blade ( ) func attackUsingKnife(weapon:Knife) ( //… print("Attacking with Knife") ) func attackUsingBlade(weapon:Blade) ( //… print("Attacking with Blade") ) func attackUsingGun(weapon:Gun) ( //… print("Attacking with Gun") ) 

Maak je geen zorgen als je niet weet wat struct is. Zie het voorlopig als iets dat een fysiek object creëert tijdens het programmeren, dus je maakt een mes, pistool en mes. Zie Swift Struct als je meer wilt weten. Zo niet, dan komen we er in de latere hoofdstukken op terug.

Het enige probleem met deze oplossing is dat u de functienamen moet onthouden om die specifieke aanvalsactie aan te roepen. Ook als het niveau stijgt, kan de speler extra functies hebben om aan te vallen met een bom, granaat, jachtgeweer, enz.

Het maken van een functie met verschillende namen is tijdrovend en verhoogt de overhead voor het onthouden van de functienaam om deze aan te roepen. Al met al is het niet intuïtief.

Het zou veel beter zijn als je verschillende functies zou kunnen creëren met dezelfde naam maar met een verschillende implementatie voor elk wapen. Op deze manier is het onthouden van één functienaam voldoende en hoef je je geen zorgen te maken over de functienamen voor andere wapens.

Wat is functie-overbelasting?

Het proces dat we zojuist hebben beschreven, staat bekend als functie-overbelasting. Per definitie wordt het proces van het creëren van twee of meer dan twee functies met dezelfde naam maar met een verschillend aantal of verschillende soorten parameters, bekend als functie-overbelasting.

Laten we dit in het onderstaande voorbeeld bekijken:

Voorbeeld 1: functie overbelasting

 struct Knife ( ) struct Gun ( ) struct Blade ( ) func attack(with weapon:Knife) ( print("Attacking with Knife") ) func attack(with weapon:Gun) ( print("Attacking with Gun") ) func attack(with weapon:Blade) ( print("Attacking with Blade") ) attack(with: Gun()) attack(with: Blade()) attack(with: Knife()) 

Wanneer u het bovenstaande programma uitvoert, is de uitvoer:

 Aanvallen met geweer Aanvallen met mes Aanvallen met mes 

In het bovenstaande programma hebben we drie verschillende functies gemaakt met dezelfde naam attack. Het accepteert echter verschillende parametertypes. Op deze manier attackis het voldoende om de naam te onthouden om de functie aan te roepen.

  • De aanroep attack(with: Gun())activeert de instructie binnen de functie func attack(with weapon:Gun).
  • De aanroep attack(with: Blade())activeert de instructie binnen de functie func attack(with weapon:Blade).
  • De call- attack(with: Knife())instructie binnen de functie func attack(with weapon:Knife).

Voorbeeld 2: functieoverbelasting op basis van verschillende parametertypes

 func output(x:Int) ( print("The int value is (x)") ) func output(x:String) ( print("The string value is (x)") ) output(x: 2) output(x: "Swift") 

Wanneer u het bovenstaande programma uitvoert, is de uitvoer:

 De int-waarde is 2 De tekenreekswaarde is Swift 

In het bovenstaande programma hebben we twee functies met dezelfde naam output()en hetzelfde aantal parameters. De eerste output()functie heeft echter een geheel getal als parameter en de tweede output()functie Stringals parameter.

Net als in Voorbeeld 1,

  • de aanroep naar output(x: 2)activeert de instructie binnen de functie func output(x:Int)en
  • de aanroep om output(x: "Swift")de instructie binnen de functie te activeren func output(x:String).

Voorbeeld 3: Functieoverbelasting op basis van een verschillend aantal parameters

 func output() ( print("Good Morning!") ) func output(text:String) ( print(text) ) func output(text:String, num:Int) ( print("(text)(num)!") ) output() output(text: "Good Evening!") output(text1: "Good N", num: 8) 

Wanneer u het bovenstaande programma uitvoert, is de uitvoer:

Goedemorgen! Goedenavond! Welterusten!

In het bovenstaande programma is de functie output()overbelast op basis van het aantal argumenten.

De eerste output()heeft geen parameters, de tweede output()heeft een enkele parameter:, Stringen de derde output()heeft twee parameters: Stringen Int.

Laten we proberen te overbelasten door de parameternaam te wijzigen maar het argumentlabel hetzelfde te houden als:

Voorbeeld 4: functie-overbelasting met hetzelfde argumentlabel

 func output(value text:String) ( print(text) ) func output(value num:Int) ( print(num) ) output(value: 2) output(value: "Hello") 

Wanneer u het bovenstaande programma uitvoert, is de uitvoer:

 2 Hallo

Zoals je kunt zien, kun je in het bovenstaande programma hetzelfde argumentlabel gebruiken voor de overbelaste functies. Omdat overbelasting echter vereist, moet u een verschillend aantal parameters of verschillende soorten parameters hebben.

Interessante artikelen...