Š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ā attack
ir 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:, String
bet trešais output()
ņem divus parametrus: String
un 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.