Sovraccarico della funzione rapida (con esempi)

In questo articolo imparerai il sovraccarico di funzioni, quando è necessario il sovraccarico di funzioni e come eseguire il sovraccarico con esempi.

Due o più funzioni con lo stesso nome ma argomenti diversi sono note come funzioni di sovraccarico.

Perché abbiamo bisogno del sovraccarico delle funzioni?

Immagina di sviluppare un gioco sparatutto in cui il giocatore può attaccare i suoi nemici usando un coltello, una lama e una pistola. La tua soluzione per la funzionalità di attacco potrebbe essere definire le azioni in funzioni come:

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

Ma quando provi a eseguire il programma sopra, otterrai un errore in fase di compilazione in Swift come "attack ()" precedentemente dichiarato qui . Tuttavia, un'altra soluzione potrebbe essere la definizione di nomi di funzioni diversi per la particolare funzionalità come:

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

Non preoccuparti se non sai cos'è struct. Per ora pensalo come qualcosa che crea un oggetto fisico nella programmazione, quindi stai creando un coltello, una pistola e una lama. Se vuoi saperne di più, vedi Swift Struct. In caso contrario, torneremo su questo argomento nei capitoli successivi.

L'unico problema con questa soluzione è che devi ricordare i nomi delle funzioni per chiamare quella particolare azione di attacco. Inoltre, con l'aumentare del livello, il giocatore può avere funzionalità aggiuntive per attaccare usando bombe, granate, fucili, ecc.

La creazione di funzioni con nomi diversi richiede tempo e aumenta il sovraccarico di ricordare il nome della funzione per chiamarla. Tutto sommato, non è intuitivo.

Sarebbe molto meglio se potessi creare funzioni diverse con lo stesso nome ma implementazioni diverse per ciascuna arma. In questo modo, ricordare un nome di funzione è sufficiente e non dovresti preoccuparti dei nomi di funzione per altre armi.

Cos'è il sovraccarico delle funzioni?

Il processo che abbiamo appena descritto è noto come sovraccarico di funzioni. Per definizione, il processo di creazione di due o più di due funzioni con lo stesso nome ma con un numero o tipi di parametri diversi passati è noto come sovraccarico di funzioni.

Vediamolo nell'esempio seguente:

Esempio 1: sovraccarico di funzioni

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

Quando esegui il programma sopra, l'output sarà:

 Attaccare con la pistola Attaccare con la lama Attaccare con il coltello 

Nel programma sopra, abbiamo creato tre diverse funzioni con lo stesso nome attack. Tuttavia, accetta diversi tipi di parametri. In questo modo attackè sufficiente ricordare il nome per chiamare la funzione.

  • La chiamata attack(with: Gun())attiva l'istruzione all'interno della funzione func attack(with weapon:Gun).
  • La chiamata attack(with: Blade())attiva l'istruzione all'interno della funzione func attack(with weapon:Blade).
  • L' attack(with: Knife())istruzione call all'interno della funzione func attack(with weapon:Knife).

Esempio 2: sovraccarico di funzioni basato su diversi tipi di parametri

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

Quando esegui il programma sopra, l'output sarà:

 Il valore int è 2 Il valore della stringa è Swift 

Nel programma sopra, abbiamo due funzioni con lo stesso nome output()e lo stesso numero di parametri. Tuttavia, la prima output()funzione accetta un numero intero come parametro e la seconda output()funzione accetta Stringcome parametro.

Simile all'esempio 1,

  • la chiamata a output(x: 2)attiva l'istruzione all'interno della funzione func output(x:Int)e
  • la chiamata a output(x: "Swift")innesca l'istruzione all'interno della funzione func output(x:String).

Esempio 3: sovraccarico di funzioni basato su un numero diverso di parametri

 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) 

Quando esegui il programma sopra, l'output sarà:

Buongiorno! Buona serata! Buona notte!

Nel programma precedente, la funzione output()è stata sovraccaricata in base al numero di argomenti.

Il primo output()non accetta parametri, il secondo output()accetta un singolo parametro:, Stringe il terzo output()accetta due parametri: Stringe Int.

Proviamo a sovraccaricare modificando il nome del parametro ma mantenendo l'etichetta dell'argomento uguale a:

Esempio 4: sovraccarico di funzioni con la stessa etichetta di argomento

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

Quando esegui il programma sopra, l'output sarà:

 2 Ciao

Come puoi vedere, nel programma sopra, puoi usare la stessa etichetta di argomento per le funzioni sovraccaricate. Tuttavia, poiché il sovraccarico richiede, è necessario disporre di un numero diverso di parametri o di diversi tipi di parametri.

Articoli interessanti...