Nella Lezione 5 hai imparato che una funzione è un codice riutilizzabile che fornisce istruzioni per eseguire un'azione o per creare un output basato sull'input.
Per definire una funzione sono necessarie tre parti chiave: un identificatore univoco, il tipo di informazioni da aspettarsi come risultato e cosa farà la funzione quando viene chiamata.
Come definire una funzione
Firme della funzione
Nella Lezione 3, hai visto come dichiarare una variabile o una costante nominandola e dando il tipo di valore che utilizzerà.
Una firma della funzione funziona in modo simile. La firma della funzione utilizza un identificatore univoco per la funzione, insieme ai parametri che descrivono l'input necessario e, infine, il tipo restituito per il risultato o l'output.
Ciò che la funzione fa effettivamente è definito nel blocco di codice.
Blocco di codice
Il blocco di codice è il gruppo di espressioni che viene dopo la firma della funzione. Questa è la sintassi della funzione e del relativo blocco di codice:
name() : type =
codeblock
Esistono diversi modi per formattare un blocco di codice. Un modo consiste nell'applicare un rientro alle righe di codice dopo l'identificatore. Puoi vederlo nella sintassi della funzione sopra. (Imparerai di più su come impostare i blocchi di codice in seguito, ma per ora puoi utilizzare questo.)
Le espressioni nel blocco di codice definiscono cosa farà effettivamente la funzione quando viene chiamata.
Queste espressioni vengono eseguite solo quando viene chiamata tale funzione. Quando il programma raggiunge la fine di quel blocco di codice, queste espressioni vengono eseguite, almeno fino alla successiva chiamata di tale funzione, e il programma esegue il bit successivo di codice che segue questa chiamata di funzione.
Corpo
Il blocco di codice è detto anche corpo quando definisce cosa fa la funzione.
Ambito
Finora, hai imparato che:
- Una funzione ha un identificatore univoco che viene utilizzato per attivarla per fare qualcosa nel programma.
- Ciò che fa una funzione si basa sulle espressioni nel corpo della funzione.
- Al termine dell'ultima riga di codice nel corpo, la chiamata di funzione termina e il programma passa alla riga di codice successiva dopo la chiamata di funzione presente nel programma.
Le istruzioni contenute in tale funzione e tutti i valori che escono dalla funzione determinano la funzione ambito.
È ora di tornare alle espressioni che è possibile utilizzare per definire la funzione. Puoi creare costanti e variabili (le ricordi dalla Lezione 3?) e aggiungerle al corpo della funzione.
Quando si inserisce una variabile nel corpo, è locale rispetto all'ambito della funzione. Locale, in questo senso, significa che questo codice vive e funziona solo in quel corpo e solo quando viene chiamata la funzione.
E allora, che cosa rappresenta un ambito? È l'associazione del nome della funzione al valore prodotto dalla funzione. Questo valore si può utilizzare soltanto all'interno del blocco di codice in cui viene creato o entro tale ambito.
Creazione di istanze
Un'istanza è un'applicazione univoca di tale funzione quando viene chiamata ed eseguita. La creazione di questa istanza è la creazione di un'istanza. Tieni presente che l'istanza e la creazione di un'istanza sono entrambe correlate alla parola istante, breve lasso di tempo.
E questo fa emergere il concetto di durata.
Durata
Un'istanza ha una durata: un inizio, una metà e una fine.
Ciò significa che la durata di ciò che è contenuto nel corpo di quella funzione è limitata all'ambito del corpo e non è possibile accedere alle variabili locali (quelle limitate a questo ambito corrente) al di fuori dell'ambito.
Condizionali
L'esempio seguente mostra come calcolare il numero massimo di trappole per topi che un giocatore può acquistare con il numero di monete di cui dispone.
La costante MousetrapsYouCanBuyviene creata all'interno del blocco if e l'ambito è limitato al blocco if.
Quando la costante MaxMousetrapsYouCanBuy viene utilizzata al di fuori del blocco di codice if, genera un errore perché il nome MaxMousetrapsYouCanBuy non esiste al di fuori dell'ambito. Viene visualizzato un messaggio di errore: Identificatore sconosciuto. Ciò significa che MaxMousetrapsYouCanBuy è valido soltanto all'interno di tale ambito.
Quando l'espressione viene completata, le costanti locali e le variabili locali create nel corpo non esistono più. Hanno raggiunto la fine della loro durata.
Pensa all'ambito come a una porzione di codice in cui le cose funzionano fino a quando non vengono completate.
Sintassi della funzione
Diamo di nuovo un'occhiata alla sintassi della funzione, ma questa volta un po' più a fondo.
name() : type =
codeblock
name() : type = |
Questa è la firma della funzione. È costituita da La firma della funzione include il tipo di input che verrà utilizzato. Il valore restituito dalla funzione (ciò che viene dopo |
codeblock |
Il blocco di codice funzione, o corpo, è dove si aggiungono costanti, variabili o altre espressioni per mostrare cosa fa la funzione quando viene chiamata. |
Ad esempio, una funzione per pagare una trappola per topi potrebbe essere simile alla seguente:
var Coins : int = 500
CoinsPerMousetrap : int = 100
BuyMousetrap() : void =
set Coins = Coins - CoinsPerMousetrap
Print("Trappola per topi acquistata! Hai ancora {Coins} monete.")
Le convenzioni e le regole di denominazione per i nomi delle funzioni sono le stesse che utilizzeresti per variabili e costanti. Poiché le funzioni eseguono una sequenza di azioni, è consigliabile nominarle in modo da riflettere le azioni che svolgono, come ad esempio BuyMousetrap().
Void
Avrai notato void nella firma della funzione di BuyMousetrap(). Il tipo void per una funzione significa che la sua chiamata di funzione non restituisce nulla. Imparerai di più su 'void' e su come usarlo nella prossima lezione.
Non ripeterti
Come principio fondamentale della programmazione, impara a Non ripeterti.
Ciò significa che se stai ripetendo una riga di codice tre volte o più, dovresti considerare di scriverla in un modo diverso. E sì, c'è un motivo!
Più righe di codice scrivi, più difficile è la manutenzione del codice e più è probabile che avrai bug quando inevitabilmente cambi il codice in una posizione ma non in un'altra.
Le funzioni, come le costanti, sono un modo per non ripetere il codice quando non è necessario, quindi non solo le funzioni evitano la duplicazione del codice, ma riducono anche la manutenzione, diminuendo la probabilità di errori di codice.
Presta attenzione alle maiuscole e minuscole durante la scrittura del codice, sia nel modo in cui si nominano le espressioni e le funzioni, sia quando si utilizzano parole chiave e funzioni incorporate. Verse fa distinzione tra maiuscole e minuscole e gli errori nelle maiuscole corrette e coerenti possono causare bug ed errori di compilazione.
Riepilogo
- Una funzione è un codice riutilizzabile che fornisce istruzioni per eseguire un'azione o creare un output basato sull'input.
- Le funzioni richiedono tre parti: un identificatore, un tipo e un blocco di codice che contiene il risultato della funzione quando viene chiamata.
- Le funzioni vengono chiamate dalle loro firme della funzione.
- Un blocco di codice è anche chiamato corpo quando definisce cosa fa la funzione. *L'ambito si riferisce al valore associato alla funzione che, a sua volta, è definito dal contenuto del blocco di codice.
- Il codice contenuto all'interno di un blocco di codice è locale per quell'ambito.
- La durata rappresenta l'intervallo dell'ambito.
- Non ripeterti.