Istruzione function

Dichiara una nuova funzione. Può essere utilizzata in vari contesti:

// in the global scope
function functionname([paramlist]) [: type] {
   [body]
}

// declares a method in a class
[attributes] [modifiers] function functionname([paramlist]) [: type] {
   [body]
}

// declares a method in an interface
[attributes] [modifiers] function functionname([paramlist]) [: type]

Argomenti

  • attributes
    Facoltativo. Attributi che controllano la visibilità e il comportamento del metodo.

  • modificatori
    Facoltativo. Modificatori che controllano la visibilità e il comportamento del metodo.

  • functionname
    Obbligatoria. Nome della funzione o del metodo.

  • paramlist
    Facoltativo. Elenco delimitato da virgole di parametri per la funzione o il metodo. Ogni parametro può includere una specificazione di tipo. L'ultimo parametro può essere un parameterarray, indicato da tre punti (...) seguiti da un nome di matrice di parametri seguito a sua volta da un'annotazione di tipo di una matrice tipizzata.

  • type
    Facoltativo. Tipo di metodo restituito.

  • body
    Facoltativo. Una o più istruzioni che definiscono le modalità di funzionamento della funzione o del metodo.

Note

Utilizzare l'istruzione function per dichiarare una funzione da utilizzare successivamente. Il codice specificato in body viene eseguito soltanto dopo che la funzione viene richiamata da un punto qualsiasi dello script. L'istruzione return viene utilizzata per ottenere un valore dalla funzione. Non è necessario utilizzarla, dal momento che il valore verrà restituito dal programma una volta raggiunta la fine della funzione.

I metodi sono analoghi alle funzioni globali, con la differenza che il loro ambito è limitato alla classe o interface in cui sono definiti e possono includere vari modificatori che consentono di regolarne la visibilità e il comportamento. Un metodo definito in un'interface non può avere un corpo, mentre lo deve avere un metodo definito in una classe. Questa regola non viene applicata se un metodo in una classe è astratto o se la classe è astratta: in tali casi, infatti, il metodo non può avere un corpo.

È possibile utilizzare l'annotazione di tipo per dichiarare il tipo di dati restituito dalla funzione o dal metodo. Se il tipo restituito specificato è void, non verrà restituito alcun valore da alcuna delle istruzioni return incluse nella funzione. Se il tipo restituito specificato è diverso da void, tutte le istruzioni return incluse nella funzione restituiranno un valore che può essere assegnato forzatamente al tipo restituito. Viene restituito il valore undefined se è stato specificato un tipo restituito ma è stata inclusa un'istruzione return priva di valori o se è stata raggiunta la fine della funzione senza che sia stata rilevata un'istruzione return. Le funzioni costruttore non possono specificare un tipo restituito, poiché l'operatore new restituisce automaticamente l'oggetto creato.

Se non ne è stato specificato uno per la funzione, il tipo restituito viene impostato su Object o void. Il tipo restituito void viene selezionato solo quando nel corpo della funzione non vi sono istruzioni return o le istruzioni return non includono alcun valore.

È possibile utilizzare una matrice di parametri come ultimo parametro di una funzione. Qualsiasi eventuale argomento aggiuntivo passato a una funzione dopo i parametri obbligatori verrà immesso nella matrice di parametri. L'annotazione del tipo di parametro non è facoltativa: deve specificare una matrice di parametri. Per accettare parametri di tipi arbitrari, utilizzare Object[] come matrice tipizzata. Quando viene chiamata una funzione che accetta un numero variabile di argomenti, anziché fornire un elenco di parametri è possibile utilizzare una matrice esplicita del tipo previsto.

Nelle chiamate di funzioni assicurarsi di includere sempre le parentesi ed eventuali argomenti obbligatori. Se si chiama una funzione senza utilizzare le parentesi, verrà restituito il testo della funzione e non il relativo risultato.

Esempio 1

Nel codice seguente viene illustrato l'utilizzo dell'istruzione function secondo la prima sintassi:

interface IForm {
   // This is using function in Syntax 3.
   function blank() : String;
}

class CForm implements IForm {
   // This is using function in Syntax 2.
   function blank() : String {
      return("This is blank.");
   }
}

// This is using function in Syntax 1.
function addSquares(x : double, y : double) : double {
   return(x*x + y*y);
}

// Now call the function.
var z : double = addSquares(3.,4.);
print(z);

// Call the method.
var derivedForm : CForm = new CForm;
print(derivedForm.blank());

// Call the inherited method.
var baseForm : IForm = derivedForm;
print(baseForm.blank());

L'output del programma è il seguente:

25
This is blank.
This is blank.

Esempio 2

Nell'esempio seguente, una funzione denominata printFacts assume come input un oggetto String e utilizza una matrice di parametri per accettare un numero variabile di Object.

function printFacts(name : String, ... info : Object[]) {
   print("Name: " + name);
   print("Number of extra information: " + info.length);
   for (var factNum in info) {
      print(factNum + ": " + info[factNum]);
   }
}

// Pass several arguments to the function.
printFacts("HAL 9000", "Urbana, Illinois", new Date(1997,0,12));
// Here the array is intrepeted as containing arguments for the function.
printFacts("monolith", [1, 4, 9]);
// Here the array is just one of the arguments.
printFacts("monolith", [1, 4, 9], "dimensions");
printFacts("monolith", "dimensions are", [1, 4, 9]);

L'output visualizzato al termine dell'esecuzione del programma è il seguente:

Name: HAL 9000
Number of extra information: 2
0: Urbana, Illinois
1: Sun Jan 12 00:00:00 PST 1997
Name: monolith
Number of extra information: 3
0: 1
1: 4
2: 9
Name: monolith
Number of extra information: 2
0: 1,4,9
1: dimensions
Name: monolith
Number of extra information: 2
0: dimensions are
1: 1,4,9

Requisiti

Versione 1 (per la sintassi 1) Versione .NET (per le sintassi 2 e 3)

Vedere anche

Riferimenti

Operatore new

Istruzione class

Istruzione interface

Istruzione return

Concetti

Ambito di variabili e costanti

Annotazione di tipi

Matrici tipizzate

Altre risorse

Modificatori