Suoni (trovati) nel tempo
Pitagora
Allora Leucippo, soddisfatto dalla polifonia del mio carillon?
Leucippo
Sì Pitagora (Leucippo indica una distesa sterminata di anfore). Però, a voler spaccare l'atomo, manca ancora una dimensione...
Pitagora
E quale?
Leucippo
Finora abbiamo interagito con il tuo carillon in modo "sincrono": quando chiediamo di eseguire un comando (per esempio valutare una funzione), la macchina esaudisce la nostra richiesta, immediatamente.
Pitagora
Esatto.
Leucippo
Quindi possiamo sì suonare note diverse, ma possiamo farlo solo contemporaneamente. I nostri suoni sono relegati ad un eterno presente...
Pitagora
Dove vuoi arrivare, Leucippo?
Leucippo
Il fatto è che la musica è fatta di suoni diversi, suonati in precisi momenti successivi... tutto scorre ©, e i suoni della musica non fanno eccezione! Ma il tempo, questa elusiva presenza, ad oggi non compare nella API del carillon (né in quello delle immagini, dove ci consentirebbe magari di creare qualche animazione).
Pitagora
Anche se Zenone e Parmenide obietterebbero che il tempo è un'illusione, ora mi è chiara la tua perplessità, Leucippo! Ma non ti preoccupare: il linguaggio delle nostre API ci offre dei meccanismi generali che ci consentono di "temporizzare" l'esecuzione dei nostri comandi! Li ho sfruttati per definire una funzione molto utile: "esegui_tra". Ti faccio vedere come funziona con un esempio:
esegui_tra(1000, anfore[0].suona, 200);
Quando eseguiamo questo comando, stiamo chiedendo di eseguire (valutare) il metodo anfore[0].suona con il parametro 200, tra 1000 millisecondi. Il nostro interprete Javascript, quindi, cronometro alla mano, 1000 millisecondi dopo che abbiamo eseguito il comando, invocherà la funzione "anfore[0].suona(200).
(Attenzione: il secondo parametro di "esegui_tra" è sempre il nome di un metodo, o una funzione... Ecco un altro buon motivo per aver imparato a definirne una...)
Ora prova tu: fai emettere al carillon due suoni a frequenze 200 e 300 in sequenza, a distanza di mezzo secondo l'uno dall'altro.
Clicca Coding-mooc Polimi per accedere all'esercizio.