Non so se ve ne siete accorti, parlo ai programmatori alle prime armi, ma esiste un altro modo di passare parametr alle funzioni; ad esempio, in C possiamo passarle per valore o per riferimento:
void main(*args[])
Qui passiamo alla funzione void l’indirizzo del vettore args. Questo è un esempio di passaggio per riferimento. Lo usiamo quando vogliamo modificare il contenuto di una variabile attraverso una funzione.
Oppure possiamo passare il parametro per valore:
#include <stdio.h> int fattoriale(int); int main() { int a=10; int b; b = fattoriale(a); printf("\n%i! = %i\n", a, b); } int fattoriale(int n) { if (n == 1) { return 1; } else { return n*fattoriale(n-1); } }
Qui la variabile viene ricreata ogni volta che viene richiamata ricorsivamente la funzione fattoriale: il sistema operativo alloca per n volte una nuova locazione di memoria che contiene la variabile n per il tempo che dura l’esecuzione della funzione. Alla fine dell’esecuzione dealloca la memoria.
Ma la cosa veramente fuori è che con JavaScript possiamo fare una cosa ancora diversa: possiamo passare, come parametro, anche una funzione!!
Ad esempio
function say(word) { console.log(word); } function execute(someFunction, value) { someFunction(value); } execute(say, "Hello");
La prima funzione scrive a video il contenuto della variabile word.
La seconda funzione è quella davvero speciale: prende il contenuto della variabile someFunction e lo usa come nome di funzione al suo interno!!
Quindi possiamo eseguire la funzione usando il costrutto
execute(say, "Hello");
alla funzione execute passiamo il nome della funzione da eseguire come primo parametro, e come secondo parametro il valore da dare in pasto a say.
Non solo: il primo parametro può contenere anche tutta la dichiarazione della funzione (un simile costrutto si dice una funzione anonima, infatti non ha un nome: passiamo tutta la definizione):
http.createServer(function(request, response) {
response.writeHead(200, {“Content-Type”: “text/plain”});
response.write(“Hello World”);
response.end();
}).listen(8888);
Ulteriori dettagli su JavaScript e Node.js
Anche PHP supporta le variable functions
La caratteristica appena descritta è propria anche di PHP che da la possibilità di eseguire funzioni in modalità callback. Lui le chiama variable functions:
Ad esempio:
<?php
function say($word) {
print($word);
}
function execute($someFunction, $value) {
$someFunction($value);
}
execute(‘say’, “Hello”);
?>
Commenti recenti