13. Funzioni
Le funzioni sono una caratteristica molto comune nei linguaggi di programmazione, in quanto ci consentono di dare un nome a una determinata porzione di codice, in modo da poter richiamare e quindi eseguire quella porzione da qualunque parte del codice dove la funzione risulta visibile.
Questo ci consente di risparmiare molto tempo e risorse, racchiudendo all'interno delle funzioni porzioni di codice che svolgono un determinato compito che ci sarà necessario assolvere svariate volte nella stessa applicazione.
Le funzioni si possono dichiarare mediante la direttiva function seguita dal nome che si desidera per la nuova funzione, in questo modo :
function nome_funzione()
{
// corpo della funzione
}Una volta dichiarata la funzione, sarà possibile richiamarla attraverso il suo nome come segue :
nome_funzione();
Vediamo un esempio molto semplice di funzione :
// Dichiarazione funzione
function saluta()
{
trace("Ciao!");
}
for (var i:int = 0; i < 3; i++)
saluta(); // Chiama la funzioneIl codice soprastante dichiara una funzione saluta() che manderà in output la stringa "Ciao!" ad ogni chiamata, producendo quindi il seguente output :
Ciao! Ciao! Ciao!
Passaggio di parametri
Il vero punto di forza delle funzioni, è la possibilità di passare ad esse una serie di parametri (valori) che saranno poi processati dalla funzione per produrre un risultato diverso a seconda del parametro fornito.
I parametri o anche argomenti delle funzioni, devono essere presenti anche nella dichiarazione della funzione, possibilmente specificando il tipo di dato desiderato :
function saluta(nome:String)
{
trace("Ciao " + nome + "!");
}
saluta("Mario"); // Output : "Ciao Mario!"Nell'esempio soprastante ho aggiunto, alla dichiarazione della funzione saluta(), un parametro nome di tipo String, che verrà utilizzato dalla funzione per produrre un output personalizzato.
Restituzione di valori
ActionScript consente inoltre la restituzione di valori tramite la direttiva return, e indicando il tipo di valore restituito dopo la lista dei parametri (facoltativo ma consigliato).
function saluta(nome:String):String
{
return "Ciao " + nome + "!";
}
risultato = saluta("Mario");
trace(risultato);Nella prima riga ho aggiunto, dopo la lista dei parametri (nome:String), il tipo di dato che deve essere restituito dalla funzione saluta(), indicando ad ActionScript di assicurarsi che il dato restituito tramite la direttiva return sia una stringa. Ad esempio è possibile dichiarare una funzione specificando void come tipo di dato restituito, obbligando così il compilatore a controllare che NON venga restituito alcun valore da quella funzione. Se infatti proverete a far restituire un valore alla funzione, mentre ActionScript si aspetta un void,
riceverete un errore 1051 : |
Parametri con valori di default
Un'altra opzione spesso molto utile, è la possibilità di specificare un valore di default per i parametri, così se ad una chiamata non viene specificato un parametro, quest ultimo sarà sostituito con il valore di default specificato nella dichiarazione della funzione.
Per specificare un valore di default è sufficiente assegnarlo al parametro desiderato tramite l'operatore di assegnazione "=" :
function saluta(nome:String = "John Doe"):String
{
return "Ciao " + nome + "!";
}
trace(saluta()); // Output : "Ciao John Doe!"
trace(saluta("Mario")); // Output : "Ciao Mario!"Abbiate cura durante la dichiarazione delle funzioni, di lasciare sempre per ultimi i parametri per cui intendete specificare un valore di default, o potrete avere spiacevoli scambi di valori.
Numero di argomenti variabileCon ActionScript 3 abbiamo la possibilità di utilizzare i parametri di una funzione senza sapere a priori quanti essi siano, attravero l'array arguments o il parametro speciale rest. arguments è un array contenente tutti i parametri passati alla funzione, numero che è possibile conoscere tramite la proprietà di sola lettura arguments.length. Se avete intenzione di usare l'array arguments per gestire i vostri parametri, potete comunque dichiararne un numero minimo necessario per il corretto funzionamento della funzione, senza pertanto accedervi attraverso il nome dichiarato ma utilizzando comunque l'array arguments. |
Ad esempio una funzione somma(), può sommare un numero variabile di numeri, ma per effettuare una somma ne sono necessari almeno due.
function somma(a:Number, b:Number):Number
{
var risultato:Number = new Number(0);
for (var i:int = 0; i < arguments.length; i++)
risultato += Number(arguments[i]);
return risultato;
}
trace(somma(10, 15, -5, "2", 0.4)); // Output : 22.4In questo modo se viene chiamata la funzione somma con meno di due parametri, riceveremo il seguente errore :
ArgumentError: Error #1063: Incongruenza nel conteggio degli argomenti su MethodInfo-1(). Era atteso 2, è
stato ricevuto 1.
Ricordatevi inoltre di non dichiarare un parametro di nome "arguments" perchè andrebbe in conflitto con l'array di parametri.
Infine se necessitate di effettuare delle chiamate ricorsive alla funzione, vi sarà utile sapere che potrete ottenere un riferimento alla funzione stessa tramite la proprietà arguments.callee.
Il parametro rest
Il parametro rest funziona in modo simile all'array arguments, con la differenza che rest conterrà solo i parametri in "esubero", ossia i parametri che non risultano nella dichiarazione della funzione.
Se quindi dichiarate una funzione che prende tre parametri, ma richiamandola ne specificate cinque, i due parametri in più saranno accessibili attraverso rest.
rest inoltre ci consente di dare un nome a se stesso, nome attraverso cui accederemo ai parametri come con un array.
Sulla base di queste nozioni, vediamo la funzione somma() riscritta per l'utilizzo mediante il parametro rest :
function somma(a:Number, b:Number, ... parametri):Number
{
// Nota che risultato non è assegnato a "0" ma ad "a + b"
var risultato:Number = new Number(a + b);
for (var i + int = 0; i < parametri.length; i++)
risultato += Number(parametri[i]);
return risultato;
}
trace(somma(10, 15, -5, "2", 0.4)); // Output : 22.4Infine sappiate che se scegliete il parametro rest per gestire i parametri, l'array arguments non sarà accessibile.
- Linguaggi:
- Tags:
