JS Tricks: Capitolo 5

Funzioni autoinvocanti, creare un valore random in uno specifico intervallo, mescolare casualmente un array e creare un delay nelle funzioni asincrone.

# Funzioni autoinvocanti

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
})();

# Creare un valore random in uno specifico intervallo

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].

# Mescolare casualmente un array

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.

# Creare un delay nelle funzioni asincrone

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.