Kiire funktsiooni ülekoormus (koos näidetega)

Selles artiklis saate teada funktsiooni ülekoormamise kohta, millal vajame funktsiooni ülekoormamist ja kuidas näiteid üle laadida.

Kaks või enam sama nime, kuid erineva argumendiga funktsiooni nimetatakse ülekoormatud funktsioonideks.

Miks vajame funktsiooni ülekoormamist?

Kujutage ette, et töötate välja laskemängu, kus mängija saab noa, tera ja relva abil oma vaenlasi rünnata. Teie lahendus rünnaku funktsionaalsusele võib olla toimingute määratlemine funktsioonideks:

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

Kuid kui proovite käivitada ülaltoodud programmi, saate Swiftis kompileerimisaja vea kui siin varem deklareeritud rünnakut () . Teine lahendus võib olla konkreetse funktsiooni erinevate funktsiooninimede määratlemine järgmiselt:

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

Ärge muretsege, kui te ei tea, mis on struktuur. Praegu mõelge sellest lihtsalt kui midagi, mis loob programmeerimisel füüsilise objekti, nii et loote noa, relva ja tera. Kui soovite rohkem teada saada, vaadake teemat Swift Struct. Kui ei, siis tuleme selle juurde tagasi järgmistes peatükkides.

Selle lahenduse ainus probleem on see, et peate selle konkreetse rünnaku kutsumiseks meelde jätma funktsioonide nimed. Ka taseme tõustes võivad mängijal olla lisavõimalused rünnakuks pommi, granaadi, jahipüssi jms abil.

Erinevate nimedega funktsiooni loomine on aeganõudev ja suurendab funktsiooni nime meeldejätmiseks selle kutsumiseks lisakulusid. Kokkuvõttes pole see intuitiivne.

Oleks palju parem, kui saaksite luua iga relva jaoks erinevad funktsioonid sama nimega, kuid erineva rakendusega. Nii piisab ühe funktsiooni nime meenutamisest ja te ei peaks muretsema teiste relvade funktsiooninimede pärast.

Mis on funktsiooni ülekoormamine?

Äsja kirjeldatud protsessi nimetatakse funktsiooni ülekoormamiseks. Definitsiooni järgi nimetatakse kahe või enama kui kahe sama nimega, kuid erineva arvu või tüüpi parameetritega funktsiooni loomise protsessi kui funktsiooni ülekoormamist.

Vaatame seda allpool toodud näites:

Näide 1: Funktsiooni ülekoormus

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

Ülaltoodud programmi käivitamisel on väljund:

 Rünnak relvaga Ründamine teraga ründamine noaga 

Ülaltoodud programmis oleme loonud kolm erinevat sama nimega funktsiooni attack. Kuid see aktsepteerib erinevaid parameetrite tüüpe. Nii attackpiisab funktsiooni kutsumiseks nime meelde jätmisest.

  • Kõne attack(with: Gun())käivitab funktsiooni sees oleva lause func attack(with weapon:Gun).
  • Kõne attack(with: Blade())käivitab funktsiooni sees oleva lause func attack(with weapon:Blade).
  • Funktsiooni attack(with: Knife())sees olev kõne lause func attack(with weapon:Knife).

Näide 2: Funktsiooni ülekoormamine erinevate parameetrite tüüpide põhjal

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

Ülaltoodud programmi käivitamisel on väljund:

 Int väärtus on 2 Stringi väärtus on Swift 

Ülaltoodud programmis on meil kaks funktsiooni, millel on sama nimi output()ja sama arv parameetreid. Esimene output()funktsioon võtab aga parameetrina täisarvu ja teine output()funktsioon Stringparameetrina.

Sarnaselt näitele 1

  • üleskutse output(x: 2)käivitab lause funktsiooni sees func output(x:Int)ja
  • üleskutse output(x: "Swift")käivitab funktsiooni sees oleva lause func output(x:String).

Näide 3: Funktsiooni ülekoormamine erineva arvu parameetrite põhjal

 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) 

Ülaltoodud programmi käivitamisel on väljund:

Tere hommikust! Tere õhtust! Head ööd!

Ülaltoodud programmis on funktsioon output()argumentide arvu põhjal ülekoormatud.

Esimene output()võtab parameetreid, teine output()võtab ühe parameetri: Stringja kolmas output()võtab kaks parameetrit: Stringja Int.

Proovime üle laadida, muutes parameetri nime, kuid hoides argumendi silti samana:

Näide 4: funktsiooni ülekoormamine sama argumendi sildiga

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

Ülaltoodud programmi käivitamisel on väljund:

 2 Tere

Nagu näete, võite ülaltoodud programmis kasutada sama argumendi sildi ülekoormatud funktsioonide jaoks. Kuid kuna ülekoormus nõuab, peab teil olema kas erinev arv parameetreid või erinevat tüüpi parameetrid.

Huvitavad Artiklid...