Il JavaScript ci permette di creare funzioni in grado di invocarsi da sole, le cosiddette IFEE. Sono molto utili sia per suddividere lo scope che per tutte quelle situazioni dove abbiamo bisogno che una certa porzione di codice venga eseguita in automatico:
(function(){
// codice, privato, che verrà immediatamente eseguito
})();
Quante volte ci capita di dover generare un valore random, avendo però dei vincoli sui numeri accettabili?
function randomValueBetween(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
Questa funzione genera un numero casuale appartenente all'intervallo [min, max]
.
Continuando a parlare di casualità, il modo più veloce di mescolare un array numerico è il seguente:
array.sort(() => Math.random() - 0.5)
La funzione Math.random()
genera numeri "reali" compresi nell'intervallo [0, 1)
. Per questo sottrarre 0.5
farà si che in modo equiprobabile venga generato a volte un numero positivo e a volte un numero negativo, con effetti completamente casuali nelle operazioni interne della sort
.
Alcuni lingauggi come Python offrono delle utility out-of-the-box per creare pause non bloccanti nel codice. In JavaScript siamo costretti a crearci manualmente una Promise che fa uso di un timeout. Tanto vale crearci una funzione pronta all'uso:
function sleep(ms) {
return new Promise(resolve => setTimeout(resolve, ms));
}
Il parametro ms
corrisponde ai millisecondi che vogliamo attendere.