edutecnica

Funzioni JavaScript

      

La pratica di dividere un programma in sottoprogrammi ciascuno dei quali con un compito specifico, viene applicata anche nel linguaggio JavaScript. Finora si è visto che uno scritto JS può essere inserito in qualsiasi punto della parte <body> di una pagina HTML in modo che in browser esegua le sue istruzioni nel momento stesso in cui le legge.
Questa lettura avviene, come si può immaginare, in modo sequenziale.

Prima il browser deve leggere ed impostare le direttive della parte <head> poi deve leggere i tag HTML del <body> per rappresentare il contenuto della pagina e se durante questa lettura incontra una sezione <script> dove sono contenute delle istruzioni JS, il browser le deve eseguire. In pratica, quando il browser incontra uno scritto JS, lo esegue.
Questa organizzazione di cose, non sempre è adatta alle esigenze che possono esistere. La prassi più usuale prevede l'utilizzo di funzioni dichiarate all'inizio della pagina (nella sezione <head>) che possano essere richiamate nel corpo della pagina in risposta al verificarsi di un particolare evento.

Le funzioni in JavaScript sono definite dalla parola chiave function, seguita dal nome della funzione, indicando tra parentesi tonde i parametri formali di ingresso. Le istruzioni della function sono raggruppate all'interno di una coppia di parentesi graffe secondo la seguente sintassi.

function nomeFunzione(parametri) {
      /* istruzioni */
}

La forma è abbastanza simile al caso già visto delle funzioni C e dei metodi Java; quello che si omette è la dichiarazione del tipo di dato restituito, ma questo ce lo si poteva aspettare perchè abbiamo già visto che JS non esegue un forte controllo sui tipi.

La definizione di una funzione non corrisponde alla sua esecuzione : per richiederne l'esecuzione, occorre invocarla (chiamarla) specificando il nome e gli eventuali parametri.

Una funzione che può essere eseguita al caricamento della pagina, potrebbe essere scritta nel seguente modo:


come si vede le funzioni possono anche restituire un valore; per far questo si usa l'istruzione return seguita da un valore o da una variabile. Nello specifico è stata dapprima dichiarata una funzione somma che esegue l'addizione tra i parametri op1 ed op2 e restituisce il risultato con il comando return. Il valore di ritorno della funzione somma viene assegnato alla variabile risultato e viene stampato nella pagina nel punto in cui è stato scritto il codice dell'invocazione della funzione.

Una funzione può avere più parametri o anche nessuno, come si vede nel seguente esempio


dove in uscita (id=R) viene inviato dapprima la potenza di un numero attraverso la funzione quad(a) dotata di un parametro e successivamente una stringa di avviso attraverso la funzione post() che non ha parametri. In quest'ultimo caso si può osservare un secondo modo per definire una funzione, che consiste nel dichiararla come se fosse una variabile: .

In JavaScript, le funzioni possono essere chiamate prima ancora di essere dichiarate, diversamente dal linguaggio C, dove invece, si deve far ricorso ai prototipi di funzioni.


Ma anche in questo caso, appena visto è necessario, effettuare la chiamata alla funzione.

In JavaScript una funzione può anche essere autochiamante:



Visibilità delle variabili

      

I parametri delle funzioni sono a tutti gli effetti delle variabili, ma i loro valori iniziali vengono assegnati all' invocazione della funzione e non dal codice della stessa.
I parametri della funzione sono, quindi, da considerare come delle variabili dichiarate all'interno della funzione, in entrambi i casi si tratta di variabili locali che possono essere riconosciute solo all'interno della funzione considerata.
La proprietà delle variabili di essere locali si applica solo ai parametri e alle variabili dichiarate attraverso la parola chiave var all'interno del corpo della funzione.

Le variabili dichiarate al di fuori delle funzioni sono chiamate variabili globali. perchè sono disponibili per tutto il proramma.
E' possibile accedere alle variabili globali anche all'interno di una funzione a condizione che nella funzione non vi sia una variabile locale con lo stesso nome.


Nel codice soprascritto si definiscono e si richiamano due funzioni, ciascuna delle quali assegna un valore alla variabile x. La prima uno() dichiara la variabile come locale e modifica pertanto solo il valore della variabile locale. La seconda due() non dichiara x come variabile locale. Senza la parola chiave var può essere solo:
• la dichiarazione di una variabile globale, se la variabile non esisteva prima
• oppure è un nuovo assegnamento se la variabile esiste già.

L'esecuzione di una funzione può essere richiesta anche utilizzando un gestore di eventi come un pulsante di azione:


Il pulsante di azione, oltre ai suoi attributi type e value contiene il gestore di eventi onclick; quando si preme sul pulsante il gestore viene attivato ed invoca la funzione somma, inviandogli anche i parametri.
L'output viene gestito direttamente all'interno della funzione che non ritornando alcun valore, deve essere priva dell'istruzione return.
Il risultato dell'operazione viene inviato ad un punto di uscita che noi abbiamo predisposto attraverso l'identificatore id=R all'interno di un tag <p></p> .

Una funzione può anche essere definita all'interno della parte intestativa <head>:


Come in altri linguaggi, le funzioni in JavaScript sono usate per riutilizzare il codice: definire il codice una sola volta e utilizzarlo più volte.


Input

          

Come si è visto, è possibile gestire l'output in vari modi: attraverso la console oppure tramite il browser, indirizzando i risultati verso punti specifici della pagina web facendo uso degli identificatori id di eventuali tag HTML.
Quest'ordine di cose, ricorda in qualche modo gli elementi che possono essere posizionati in un form Visual Basic, con i tag dotati di id che possono essere associati alle label (etichette) ed i pulsanti caratterizzati dalla sintassi

<input type="button" value="ok" onclick="nomeFunzione();" />

che possono essere associati ai "command button" o pulsanti di azione; ci aspettiamo, dunque, di trovare anche delle caselle di testo, che ci sono e possono essere ottenute attraverso istruzioni come:

<input type="text" id="identificatore" />

Nel seguente codice si ha una pagina HTML che accetta in una casella di testo il nome di una persona; una volta introdotto il nome bisogna premere il pulsante di azione e la pagina manda in risposta un messaggio di saluto.


Notiamo come per accedere al contenuto dei tag HTML si deve usare la proprietà .innerHTML, mentre per accedere al contenuto delle caselle di testo deve essere usata la proprietà .value.

Bisogna sottolineare come in tutti i linguaggi di programmazione, l'input prelevato da una casella di testo sia sempre considerato (in prima battuta) una generica stringa di testo. Se si vogliono usare dei valori numerici, è necessario convertire la stringa acquisita in un numero; per questo scopo, è consigliabile usare un controllo di input di tipo number predisposto all'acquisizione esclusivamente di valori numerici.


Nel precedente listato la casella di testo acquisisce un numero che poi viene passato alla fuzione quad() che stampa in uscita il valore del quadrato di quel numero.
La funzione parseInt() ha il solo compito di assicurarsi di trasformare il numero introdotto in un numero intero.
Se avessimo voluto considerare un generico numero reale (con la virgola) sarebbe stato consigliabile usare la funzione parseFloat().
Questi accorgimenti correggono in automatico la differenza "comma" separatore dei decimali che per noi è la virgola mentre per gli standard anglosassoni è il punto.
L'eventuale introduzione di un valore alfanumerico genera un segnale NaN (Not a Number) e questa è una eventualità che va prevenuta; poi vedremo come.