Överbelastning av snabb funktion (med exempel)

I den här artikeln lär du dig om funktionsöverbelastning, när behöver vi funktionsöverbelastning och hur man överbelastar med exempel.

Två eller flera funktioner med samma namn men olika argument kallas för överbelastade funktioner.

Varför behöver vi överbelastning av funktioner?

Tänk dig att du utvecklar ett skjutspel där spelaren kan attackera sina fiender med en kniv, ett blad och en pistol. Din lösning för attackfunktionen kan definiera åtgärderna i funktioner som:

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

Men när du försöker köra programmet ovan får du ett kompileringsfel i Swift som 'attack ()' som tidigare förklarats här . En annan lösning kan dock definiera olika funktionsnamn för den specifika funktionen 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") ) 

Oroa dig inte om du inte vet vad struct är. För närvarande tänk bara på det som något som skapar ett fysiskt objekt i programmeringen, så du skapar en kniv, pistol och blad. Om du vill veta mer, se Swift Struct. Om inte, kommer vi tillbaka till det i de senare kapitlen.

Det enda problemet med den här lösningen är att du måste komma ihåg funktionsnamnen för att kalla den specifika attackåtgärden. Även när nivån stiger kan spelaren ha ytterligare funktioner för attacker med bomb, granat, hagelgevär etc.

Att skapa funktion med olika namn är tidskrävande och ökar kostnaden för att komma ihåg funktionsnamnet för att kalla det. Sammantaget är det inte intuitivt.

Det skulle vara mycket bättre om du kunde skapa olika funktioner med samma namn men olika implementering för varje vapen. På det här sättet räcker det med att komma ihåg ett funktionsnamn och du behöver inte oroa dig för funktionsnamnen för andra vapen.

Vad är funktionsöverbelastning?

Processen som vi just beskrivit är känd som funktionsöverbelastning. Per definition kallas processen för att skapa två eller fler än två funktioner med samma namn men med olika antal eller typer av parametrar som överbelastning.

Låt oss se detta i exemplet nedan:

Exempel 1: Funktionsöverbelastning

 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 kör programmet ovan kommer utmatningen att vara:

 Attacking with Gun Attacking with Blade Attacking with Knife 

I programmet ovan har vi skapat tre olika funktioner med samma namn attack. Det accepterar dock olika parametertyper. Det här attackräcker att komma ihåg namnet för att ringa funktionen.

  • Samtalet attack(with: Gun())utlöser uttalandet inuti funktionen func attack(with weapon:Gun).
  • Samtalet attack(with: Blade())utlöser uttalandet inuti funktionen func attack(with weapon:Blade).
  • Samtalsförklaringen attack(with: Knife())inuti funktionen func attack(with weapon:Knife).

Exempel 2: Funktionsöverbelastning baserat på olika 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 kör programmet ovan kommer utmatningen att vara:

 Int-värdet är 2 Strängvärdet är Swift 

I ovanstående program har vi två funktioner med samma namn output()och samma antal parametrar. Den första output()funktionen tar dock ett heltal som parameter och den andra output()funktionen tar Stringsom en parameter.

Liknar exempel 1,

  • samtalet för att output(x: 2)utlösa uttalandet inuti funktionen func output(x:Int)och
  • samtalet för att output(x: "Swift")utlösa uttalandet inuti funktionen func output(x:String).

Exempel 3: Funktionsöverbelastning baserat på olika antal parametrar

 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 kör programmet ovan kommer utmatningen att vara:

God morgon! God kväll! Godnatt!

I ovanstående program har funktionen output()överbelastats baserat på antalet argument.

Den första output()tar inga parametrar, den andra output()tar en enda parameter:, Stringoch den tredje output()tar två parametrar: Stringoch Int.

Låt oss försöka överbelasta genom att ändra parameternamnet men hålla argumentetiketten samma som:

Exempel 4: Funktionsöverbelastning med samma argumentetikett

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

När du kör programmet ovan kommer utmatningen att vara:

 2 Hej

Som du kan se, i ovanstående program kan du använda samma argumentetikett för de överbelastade funktionerna. Eftersom överbelastning kräver måste du ha antingen olika antal parametrar eller olika typer av parametrar.

Intressanta artiklar...