Overbelastning av rask funksjon (med eksempler)

I denne artikkelen vil du lære om funksjonsoverbelastning, når trenger vi funksjonsoverbelastning og hvordan overbelastes med eksempler.

To eller flere funksjoner med samme navn, men forskjellige argumenter, er kjent som overbelastede funksjoner.

Hvorfor trenger vi funksjonsoverbelastning?

Tenk deg at du utvikler et skytespill der spilleren kan angripe fiendene sine ved hjelp av en kniv, et blad og en pistol. Løsningen din for angrepsfunksjonaliteten kan være å definere handlingene i funksjoner som:

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

Men når du prøver å kjøre det ovennevnte programmet, vil du få en kompileringsfeil i Swift som 'angrep ()' tidligere erklært her . Imidlertid kan en annen løsning være å definere forskjellige funksjonsnavn for den spesielle funksjonaliteten som:

 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") ) 

Ikke bekymre deg hvis du ikke vet hva struct er. Foreløpig bare tenk på det som noe som skaper et fysisk objekt i programmeringen, så du lager en kniv, pistol og blad. Hvis du vil vite mer, se Swift Struct. Hvis ikke, kommer vi tilbake til det i de senere kapitlene.

Det eneste problemet med denne løsningen er at du må huske funksjonsnavnene for å kalle den angrepshandlingen. Også når nivået stiger, kan spilleren ha tilleggsfunksjoner for angrep ved hjelp av bombe, granat, hagle osv.

Å lage funksjon med forskjellige navn er tidkrevende og øker overhead for å huske funksjonsnavnet for å kalle det. Alt i alt er det ikke intuitivt.

Det ville være mye bedre hvis du kunne lage forskjellige funksjoner med samme navn, men forskjellig implementering for hvert våpen. På denne måten er det nok å huske ett funksjonsnavn, og du trenger ikke å bekymre deg for funksjonsnavnene til andre våpen.

Hva er funksjonsoverbelastning?

Prosessen vi nettopp beskrev er kjent som funksjonsoverbelastning. Per definisjon er prosessen med å lage to eller flere enn to funksjoner med samme navn, men som har forskjellige antall eller typer parametere overført, kjent som overbelastning av funksjoner.

La oss se dette i eksemplet nedenfor:

Eksempel 1: Funksjon Overbelastning

 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()) 

Når du kjører programmet ovenfor, vil utdataene være:

 Attacking with Gun Attacking with Blade Attacking with Knife 

I programmet ovenfor har vi laget tre forskjellige funksjoner med samme navn attack. Imidlertid godtar den forskjellige parametertyper. På denne måten attacker det nok å huske navn for å ringe funksjonen.

  • Samtalen attack(with: Gun())utløser uttalelsen inne i funksjonen func attack(with weapon:Gun).
  • Samtalen attack(with: Blade())utløser uttalelsen inne i funksjonen func attack(with weapon:Blade).
  • Samtalen attack(with: Knife())uttalelsen inne funksjonen func attack(with weapon:Knife).

Eksempel 2: Funksjon Overbelastning basert på forskjellige parametertyper

 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") 

Når du kjører programmet ovenfor, vil utdataene være:

 Int-verdien er 2 Strengverdien er Swift 

I programmet ovenfor har vi to funksjoner med samme navn output()og samme antall parametere. Imidlertid output()tar den første funksjonen et helt tall som parameter, og den andre output()funksjonen tar Stringsom en parameter.

I likhet med eksempel 1,

  • samtalen for å output(x: 2)utløse uttalelsen inne i funksjonen func output(x:Int)og
  • kallet for å output(x: "Swift")utløse utsagnet inne i funksjonen func output(x:String).

Eksempel 3: Overbelastning av funksjoner basert på forskjellig antall parametere

 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) 

Når du kjører programmet ovenfor, vil utdataene være:

God morgen! God kveld! God natt!

I programmet ovenfor har funksjonen output()blitt overbelastet basert på antall argumenter.

Den første output()tar ingen parametere, den andre output()tar en enkelt parameter:, Stringog den tredje output()tar to parametere: Stringog Int.

La oss prøve å overbelaste ved å endre parameternavnet, men holde argumentetiketten den samme som:

Eksempel 4: Overbelastning av funksjoner med samme argumentetikett

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

Når du kjører programmet ovenfor, vil utdataene være:

 2 Hei

Som du kan se, i programmet ovenfor, kan du bruke samme argumentetikett for de overbelastede funksjonene. Som overbelastning krever, må du imidlertid ha et annet antall parametere eller forskjellige typer parametere.

Interessante artikler...