Brzo preopterećenje funkcije (s primjerima)

U ovom ćete članku naučiti o preopterećenju funkcije, kada nam treba preopterećenje funkcija i kako se preopteretiti primjerima.

Dvije ili više funkcija s istim imenom, ali različitim argumentima, poznate su kao preopterećene funkcije.

Zašto nam treba preopterećenje funkcije?

Zamislite da razvijate pucačku igru ​​u kojoj igrač može napadati svoje neprijatelje nožem, oštricom i pištoljem. Vaše rješenje za funkcionalnost napada može definirati radnje u funkcije kao:

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

Ali kada pokušate pokrenuti gornji program, dobit ćete pogrešku vremena kompajliranja u Swiftu kao 'napad ()' koji je ovdje prethodno deklariran . Međutim, drugo rješenje može biti definiranje različitih naziva funkcija za određenu funkcionalnost kao:

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

Ne brinite ako ne znate što je struktura. Za sada samo mislite na to kao na nešto što stvara fizički objekt u programiranju, pa stvarate nož, pištolj i oštricu. Ako želite znati više, pogledajte Swift Struct. Ako ne, vratit ćemo se na to u sljedećim poglavljima.

Jedini problem ovog rješenja je da morate upamtiti imena funkcija da biste pozvali tu određenu akciju napada. Također kako nivo raste, igrač može imati dodatne značajke za napad bombom, granatom, sačmaricom itd.

Stvaranje funkcije s različitim imenima oduzima puno vremena i povećava općenito pamćenje naziva funkcije da biste je pozvali. Sve u svemu, nije intuitivno.

Bilo bi puno bolje kada biste mogli stvoriti različite funkcije s istim nazivom, ali različitu implementaciju za svako oružje. Na taj je način dovoljno pamtiti jedno ime funkcije i ne biste se trebali brinuti oko naziva funkcija za drugo oružje.

Što je preopterećenje funkcije?

Proces koji smo upravo opisali poznat je kao preopterećenje funkcije. Po definiciji, postupak stvaranja dvije ili više od dvije funkcije s istim nazivom, ali s različitim brojem ili vrstama prosljeđenih parametara poznat je kao preopterećenje funkcije.

Pogledajmo ovo u donjem primjeru:

Primjer 1: Preopterećenje funkcije

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

Kada pokrenete gornji program, izlaz će biti:

 Napadanje pištoljem Napadanje oštricom Napad nožem 

U gore navedenom programu stvorili smo tri različite funkcije s istim nazivom attack. Međutim, prihvaća različite vrste parametara. Na ovaj način attackje dovoljno zapamtiti ime za pozivanje funkcije.

  • Poziv attack(with: Gun())pokreće izraz unutar funkcije func attack(with weapon:Gun).
  • Poziv attack(with: Blade())pokreće izraz unutar funkcije func attack(with weapon:Blade).
  • Izraz poziva attack(with: Knife())unutar funkcije func attack(with weapon:Knife).

Primjer 2: Preopterećenje funkcije na temelju različitih vrsta parametara

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

Kada pokrenete gornji program, izlaz će biti:

 Vrijednost int je 2 Vrijednost niza je Swift 

U gornjem programu imamo dvije funkcije s istim nazivom output()i istim brojem parametara. Međutim, prva output()funkcija uzima cijeli broj kao parametar, a druga output()funkcija uzima Stringparametar.

Slično Primjeru 1,

  • poziv na output(x: 2)pokreće izraz unutar funkcije func output(x:Int)i
  • poziv na output(x: "Swift")aktivira izraz unutar funkcije func output(x:String).

Primjer 3: Preopterećenje funkcije na temelju različitog broja parametara

 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) 

Kada pokrenete gornji program, izlaz će biti:

Dobro jutro! Dobra večer! Laku noć!

U gore navedenom programu funkcija output()je preopterećena na temelju broja argumenata.

Prvi output()uzima nikakve parametre, drugi output()uzima jedan parametar:, Stringa treći output()uzima dva parametra: Stringi Int.

Pokušajmo se preopteretiti promjenom imena parametra, ali zadržavajući oznaku argumenta kao:

Primjer 4: Preopterećenje funkcije istom oznakom argumenta

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

Kada pokrenete gornji program, izlaz će biti:

 2 Zdravo

Kao što vidite, u gore navedenom programu možete koristiti istu oznaku argumenta za preopterećene funkcije. Međutim, kako to zahtijeva preopterećenje, morate imati ili različit broj parametara ili različite vrste parametara.

Zanimljivi članci...