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