8.1 Numeri pseudocasuali
A volte il programmatore si trova di fronte a compiti semplici, a prima vista: "scegliere un film a caso da guardare la sera da una lista specifica", "scegliere il vincitore di una lotteria", "mescolare una playlist di canzoni scuotendo lo smartphone", "scegliere un numero casuale per crittografare un messaggio", e ogni volta sorge una domanda molto legittima: come ottenere questo numero casuale?
In realtà, se hai bisogno di ottenere un "vero numero casuale", è piuttosto difficile. Tanto che nel computer vengono installati coprocessori matematici speciali, che sanno generare tali numeri, soddisfacendo tutti i requisiti di "vera casualità".
Pertanto, i programmatori hanno inventato la loro soluzione: numeri pseudocasuali. I numeri pseudocasuali sono una sequenza in cui i numeri sembrano casuali a prima vista, ma un esperto può trovare determinati schemi con un'analisi dettagliata. Per crittografare documenti segreti tali numeri non sono adatti, ma per simulare il lancio di un dado in un gioco - assolutamente sì.
Ci sono molti algoritmi per generare una sequenza di numeri pseudocasuali e quasi tutti generano il numero casuale successivo basato sul precedente e su altri numeri ausiliari.
Ad esempio, questo programma stamperà sullo schermo 1000 numeri unici:
let a = 41;
let c = 11119;
let m = 11113;
let seed = 1;
function getNextRandom() {
seed = (a * seed + c) % m;
return seed;
}
for (let t = 0; t < 1000; t++) {
let x = getNextRandom();
console.log(x);
}
A proposito, non stiamo parlando di numeri pseudocasuali, ma di una sequenza di tali numeri, perché guardando un singolo numero non è possibile capire se sia casuale o meno.
I numeri casuali possono essere ottenuti in modi diversi:
function getNextRandom() {
return 4; // è sicuramente un numero casuale (l'ho tirato con i dadi)
}
8.2 Operatore switch
L'operatore switch
viene utilizzato per eseguire uno di diversi blocchi di codice a seconda del valore
dell'espressione. È particolarmente utile quando è necessario confrontare un valore con diverse opzioni possibili.
Sintassi:
switch(expression) {
case value1:
// codice che verrà eseguito se expression === value1
break;
case value2:
// codice che verrà eseguito se expression === value2
break;
// ...
default:
// codice che verrà eseguito se nessuno dei valori corrisponde
}
Esempio:
let day = 3;
let dayName;
switch (day) {
case 1:
dayName = "Lunedì";
break;
case 2:
dayName = "Martedì";
break;
case 3:
dayName = "Mercoledì";
break;
case 4:
dayName = "Giovedì";
break;
case 5:
dayName = "Venerdì";
break;
case 6:
dayName = "Sabato";
break;
case 7:
dayName = "Domenica";
break;
default:
dayName = "Giorno non valido";
}
console.log(dayName); // "Mercoledì"
8.3 Operatore ??
L'operatore ??
, o nullish coalescing operator, viene utilizzato per assegnare un valore di default
se l'operando sinistro è null
o undefined
. Evita l'uso di un valore di default per altri valori falsi, come 0
, false
, o stringa vuota (""
).
Sintassi:
let result = value1 ?? value2;
Se value1 non è null
o undefined
, result sarà value1. Altrimenti, result sarà value2.
Esempi:
let foo = null ?? 'default';
console.log(foo); // 'default'
let bar = 0 ?? 'default';
console.log(bar); // 0 (0 non è null o undefined)
let baz = undefined ?? 'default';
console.log(baz); // 'default'
Differenza rispetto al logico OR (||)
L'operatore ||
può anche essere utilizzato per assegnare un valore di default, ma restituisce l'operando destro per qualsiasi valore falso, come 0
, ""
, o NaN
.
Esempio di confronto:
let value = 0 || 'default';
console.log(value); // 'default' (poiché 0 è un valore falso)
let value2 = 0 ?? 'default';
console.log(value2); // 0 (poiché 0 non è null o undefined)
Applicazione
L'operatore ??
è utile in situazioni in cui è necessario assegnare un valore di default solo per null
o undefined
, ma mantenere i valori falsi, come 0
o ""
.
Esempi reali di utilizzo
Esempio 1. Valori di default negli oggetti di configurazione:
function configure(settings) {
settings = settings ?? {};
let timeout = settings.timeout ?? 1000;
let color = settings.color ?? 'blue';
// altra logica di configurazione
}
Esempio 2. Parametri di default per le funzioni:
function printMessage(message) {
message = message ?? 'No message provided';
console.log(message);
}
printMessage(null); // 'No message provided'
printMessage('Hello'); // 'Hello'
L'uso dell'operatore ??
permette di scrivere codice più pulito e prevedibile, specialmente in situazioni
in cui è importante considerare solo l'assenza di un valore (null
o undefined
).
GO TO FULL VERSION