Ātra funkciju pārslodze (ar piemēriem)

Šajā rakstā jūs uzzināsit par funkciju pārslodzi, kad mums ir nepieciešama funkciju pārslodze un kā pārslogot ar piemēriem.

Divas vai vairākas funkcijas ar vienādu nosaukumu, bet atšķirīgu argumentu (-us) sauc par pārslogotām funkcijām.

Kāpēc mums ir nepieciešama funkciju pārslodze?

Iedomājieties, ka jūs izstrādājat šāvēja spēli, kurā spēlētājs var uzbrukt ienaidniekiem, izmantojot nazi, asmeni un ieroci. Jūsu uzbrukuma funkcionalitātes risinājums var definēt darbības funkcijās kā:

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

Bet, mēģinot palaist iepriekš minēto programmu, jūs saņemsiet kompilēšanas laika kļūdu Swift kā šeit iepriekš deklarēto uzbrukumu () . Tomēr cits risinājums var būt dažādu funkciju nosaukumu noteikšana konkrētajai funkcionalitātei kā:

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

Neuztraucieties, ja nezināt, kas ir struktūra. Pagaidām domājiet tikai par to, kas programmēšanā rada fizisku objektu, tāpēc jūs izveidojat nazi, ieroci un asmeni. Ja vēlaties uzzināt vairāk, skatiet sadaļu Swift Struct. Ja nē, mēs pie tā atgriezīsimies nākamajās nodaļās.

Vienīgā šī risinājuma problēma ir tā, ka jums jāatceras funkciju nosaukumi, lai izsauktu konkrēto uzbrukuma darbību. Arī paaugstinoties līmenim, spēlētājam var būt papildu iespējas uzbrukumam, izmantojot bumbu, granātu, bisi utt.

Funkcijas izveide ar dažādiem nosaukumiem ir laikietilpīga, un tas palielina atceroties funkcijas nosaukumu, lai to izsauktu. Kopumā tas nav intuitīvi.

Būtu daudz labāk, ja jūs varētu izveidot dažādas funkcijas ar tādu pašu nosaukumu, bet atšķirīgu katra ieroča ieviešanu. Tādā veidā ir pietiekami atcerēties vienu funkcijas nosaukumu, un jums nebūtu jāuztraucas par citu ieroču funkciju nosaukumiem.

Kas ir funkciju pārslodze?

Tikko aprakstītais process ir pazīstams kā funkciju pārslodze. Pēc definīcijas process, ar kuru izveido divas vai vairākas funkcijas ar vienu un to pašu nosaukumu, bet ar atšķirīgu parametru skaitu vai tipu parametriem, tiek dēvēts par funkciju pārslodzi.

Apskatīsim to zemāk esošajā piemērā:

1. piemērs: Funkcijas pārslodze

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

Palaidot iepriekš minēto programmu, izeja būs:

 Uzbrukums ar ieroci Uzbrukums ar asmeņu uzbrukumu ar nazi 

Iepriekš minētajā programmā mēs esam izveidojuši trīs dažādas funkcijas ar tādu pašu nosaukumu attack. Tomēr tas pieņem dažādus parametru tipus. Tādā veidā attackir pietiekami atcerēties vārdu, lai izsauktu funkciju.

  • Zvans attack(with: Gun())aktivizē paziņojumu funkcijas iekšpusē func attack(with weapon:Gun).
  • Zvans attack(with: Blade())aktivizē paziņojumu funkcijas iekšpusē func attack(with weapon:Blade).
  • Zvana attack(with: Knife())paziņojums funkcijas iekšpusē func attack(with weapon:Knife).

2. piemērs: Funkcijas pārslodze, pamatojoties uz dažādiem parametru tipiem

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

Palaidot iepriekš minēto programmu, izeja būs:

 Int vērtība ir 2 Virknes vērtība ir Swift 

Iepriekš minētajā programmā mums ir divas funkcijas ar tādu pašu nosaukumu output()un vienādu parametru skaitu. Tomēr pirmā output()funkcija kā parametru ņem veselu skaitli, bet otrā output()funkcija String- parametru.

Līdzīgi kā 1. piemērā,

  • aicinājums output(x: 2)aktivizēt paziņojumu funkcijas iekšpusē func output(x:Int)un
  • aicinājums output(x: "Swift")aktivizēt paziņojumu funkcijas iekšpusē func output(x:String).

3. piemērs: Funkcijas pārslodze, pamatojoties uz dažādu parametru skaitu

 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) 

Palaidot iepriekš minēto programmu, izeja būs:

Labrīt! Labvakar! Ar labunakti!

Iepriekš minētajā programmā funkcija output()ir pārslogota, pamatojoties uz argumentu skaitu.

Pirmais output()neņem parametrus, otrais output()ņem vienu parametru:, Stringbet trešais output()ņem divus parametrus: Stringun Int.

Mēģināsim pārslogot, mainot parametra nosaukumu, bet saglabājot argumenta etiķeti tādu pašu kā:

4. piemērs: Funkciju pārslodze ar to pašu argumentu etiķeti

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

Palaidot iepriekš minēto programmu, izeja būs:

 2 Sveiki

Kā redzat, iepriekšminētajā programmā pārslogotajām funkcijām varat izmantot to pašu argumentu etiķeti. Tomēr, tā kā ir nepieciešama pārslodze, jums ir jābūt vai nu atšķirīgam parametru skaitam, vai dažāda veida parametriem.

Interesanti raksti...