«

»

Set 30

Uno sguardo ad una feature molto particolare di JavaScript

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”);
?>

Lascia un commento

Il tuo indirizzo email non sarà pubblicato. I campi obbligatori sono contrassegnati *

Puoi usare i seguenti tag ed attributi HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>