dal 2015 - visita n. 619
Funzioni
Funzioni

 

Funzioni

Le funzioni non sono altro che un insieme di codice JavaScritp racchiuso fra parentesi graffe e individuato tramite un nome per poterlo richiamare tutte le volte che serve. Esse sono alla base di ogni script ed al loro interno si possono inserire tutte le operazioni necessarie allo script. Generalmente in uno script con un minimo di complessità sono inserite più funzioni che possono interagire fra di loro.

Per dichiarare una funzione si utilizza la parola chiave function seguita dal nome della funzione ed una coppia di parentesi tonde entro cui, eventualmente, vengono inseriti anche dei parametri separati da una virgola. Subito dopo le parentesi tonde segue tutto il codice utile della funzione racchiuso in una coppia di parentesi graffe.

Questa è la struttura tipica di una funzione:

function nomefunc(a,b,c) {
....
....
[return d]
}

L'istruzione return viene utilizzata nei casi in cui occorra restituire un valore risultante dai calcoli della funzione, altrimenti viene omessa. Quando si incontra una return la funzione si interrompe e lo script continua con l'istruzione successiva alla chiamata della funzione.

Nel primo esempio viene utilizzata una semplice funzione, con 3 parametri e che non restituisce nulla, il cui scopo è di semplificare la costruzione di una tabella a 3 colonne.
Prova

Nel secondo esempio, invece, viene utilizzata una funzione con 2 parametri che restituisce una formattazione di 2 stringhe.
Prova


Funzioni ricorsive

Per funzione ricorsiva si intende una funzione che richiama sé stessa. Da un punto di vista teorico, un problema che può essere risolto con un algoritmo ricorsivo può anche essere risolto con un algoritmo iterativo, ossia ricorrendo all'utilizzo dei cicli.
La differenza, in termini di prestazioni, è a leggero favore di questi ultimi, in quanto, nel caso della ricorsione, il continuo richiamo della funzione da parte di sè stessa utilizza intensivamente lo stack di memoria con conseguente rapido sovraccarico dell memoria, a maggior ragione in un linguaggio interpretato come JavaScript. Tuttavia, in alcuni casi, le funzioni ricorsive conferiscono una leggibilità e un'eleganza al codice non raggiungibili altrimenti. In generale, comunque, si può dire che i due metodi si equivalgono e quindi la scelta dipende dalle preferenze individuali.

L'esempio classico di algoritmo ricorsivo è quello del calcolo del fattoriale di un numero N che si ottiene moltiplicando tra loro tutti i numeri interi compresi tra 1 ed N. Per esempio, il fattoriale di 7, che si indica con la scritta 7!, è uguale a: 1x2x3x4x5x6x7 = 5040. La sua trasposizione in codice JavaScript è mostrata nel listato di prova.
Prova

Nell'esempio indicato, la funzione fatt(n) lavora con il parametro n che le viene passato dal chiamante, e richiama sé stessa all'interno del suo codice con l'argomento di volta in volta decrementato di uno fino a quando tale argomento sarà maggiore di uno. Il numero n ricevuto viene moltiplicato per quello immediatamente precedente n-1. Quando, finalmente, il numero ricevuto sarà uguale a uno, la variabile risultato r verrà impostata ad uno e tutte le chiamate alla funzione, che si erano annidate sullo stack, cominceranno a rientrare in ordine inverso, dall'ultima alla prima. Infatti, finché il numero ricevuto come argomento sarà maggiore di uno, la funzione non eseguirà altra operazione se non continuare a chiamare sé stessa.
Solo quando la condizione di uscita dalla ricorsione sarà soddisfatta l'esecuzione passerà al ramo else, permettendo a tutte le altre chiamate rimaste in attesa di terminare la loro esecuzione.

A proposito dell'ordine inverso di esecuzione durante la ricorsione, questo secondo esempio dovrebbe aiutare a comprendere come in effetti le successive chiamate a una funzione ricorsiva, per effetto dello stack di memoria, rientrino in ordine inverso. La funzione invert(n) sembra dover eseguire un conto alla rovescia da 9 a 0, ma visualizzando i momenti di rientro dalla ricorsione si noterà, invece, come essa effettui un conteggio in avanti, esattamente nell'ordine in cui le chiamate ricorsive rientrano dallo stack.
Prova

Come si può facilmente notare, in questo secondo esempio la funzione ricorsiva invert(n) non restituisce alcun valore, visualizzando essa stessa l'output con un'istruzione document.write. L'istruzione return serve solo per terminare la serie di chiamate alla funzione stessa. Fino a che il parametro n ricevuto come argomento è maggiore o uguale a 0 invert(n) continua a chiamare sé stessa.
Quando la condizione di uscita dalla ricorsione sarà soddisfatta la serie di chiamate ricorsive viene interrotta e, dalla prima all'ultima, tali chiamate rientrano mostrando, dall'ultimo al primo, il numero ricevuto come argomento.

Verificare sempre la corretta logica della condizione di uscita dalla ricorsione perchè il suo mancato funzionamento rischia di provocare un ciclo infinito di chiamate!!


















Introduzione
Variabili ed Operatori
Parole riservate
Codici Carattere
HTML e JavaScript
Funzioni
Strutture di controllo
Eventi
Oggetti
Oggetti predefiniti
Espressioni Regolari



Sii tu stesso il cambiamento che desideri vedere nel mondo.
Mahatma Gandhi

Valid CSS!
pagina generata in 0.001 secondi