8.1 Nombres pseudo-aléatoires
Parfois, un programmeur se retrouve avec des tâches simples en apparence : « choisir un film aléatoire pour la soirée dans une liste spécifique », « choisir un gagnant de la loterie », « mélanger une liste de chansons en secouant le smartphone », « choisir un nombre aléatoire pour chiffrer un message », et chaque fois il se pose une question très légitime : comment obtenir ce fameux nombre aléatoire ?
En fait, si tu veux obtenir un « vrai nombre aléatoire », c'est assez difficile. Au point que des coprocesseurs mathématiques spéciaux sont intégrés dans les ordinateurs, capables de générer de tels nombres, remplissant toutes les exigences de la « vraie aléa ».
Donc, les programmeurs ont trouvé leur propre solution — les nombres pseudo-aléatoires. Les nombres pseudo-aléatoires sont une certaine séquence, où les nombres semblent au premier abord aléatoires, mais un spécialiste pourra, en les analysant de près, y trouver certaines régularités. Pour le chiffrement de documents secrets, ces nombres ne conviennent pas, mais pour simuler le lancer de dé dans un jeu — si.
Il existe de nombreux algorithmes pour générer une séquence de nombres pseudo-aléatoires et presque tous génèrent le prochain nombre aléatoire sur la base du précédent et de quelques nombres auxiliaires.
Par exemple, ce programme affichera 1000 nombres uniques :
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);
}
D'ailleurs, nous ne parlons pas de nombres pseudo-aléatoires, mais précisément de la séquence de ces nombres, car en regardant un seul nombre, il est impossible de comprendre s'il est aléatoire ou non.
Tu peux obtenir un nombre aléatoire de différentes manières :
function getNextRandom() {
return 4; # c'est carrément aléatoire (je l'ai tiré au dé)
}
8.2 L'opérateur switch
L'opérateur switch
est utilisé pour exécuter un des plusieurs blocs de code en fonction de la valeur d'une expression. Il est particulièrement utile quand il est nécessaire de comparer une valeur avec plusieurs options possibles.
Syntaxe :
switch(expression) {
case value1:
// code qui s'exécute si expression === value1
break;
case value2:
// code qui s'exécute si expression === value2
break;
// ...
default:
// code qui s'exécute si aucune des valeurs ne correspond
}
Exemple :
let day = 3;
let dayName;
switch (day) {
case 1:
dayName = "Lundi";
break;
case 2:
dayName = "Mardi";
break;
case 3:
dayName = "Mercredi";
break;
case 4:
dayName = "Jeudi";
break;
case 5:
dayName = "Vendredi";
break;
case 6:
dayName = "Samedi";
break;
case 7:
dayName = "Dimanche";
break;
default:
dayName = "Jour invalide";
}
console.log(dayName); // "Mercredi"
8.3 L'opérateur ??
L'opérateur ??
, ou nullish coalescing operator, est utilisé pour assigner une valeur par défaut si l'opérande gauche est null
ou undefined
. Il permet d'éviter l'application d'une valeur par défaut pour d'autres valeurs fausses, comme 0
, false
, ou une chaîne vide (""
).
Syntaxe :
let result = value1 ?? value2;
Si value1 n'est pas null
ou undefined
, result sera value1. Sinon, result sera value2.
Exemples :
let foo = null ?? 'default';
console.log(foo); // 'default'
let bar = 0 ?? 'default';
console.log(bar); // 0 (0 n'est pas null ou undefined)
let baz = undefined ?? 'default';
console.log(baz); // 'default'
Différence avec le OU logique (||)
L'opérateur ||
peut également être utilisé pour définir une valeur par défaut, mais il renvoie l'opérande de droite pour toutes les valeurs fausses, comme 0
, ""
, ou NaN
.
Exemple de comparaison :
let value = 0 || 'default';
console.log(value); // 'default' (car 0 est une valeur fausse)
let value2 = 0 ?? 'default';
console.log(value2); // 0 (car 0 n'est pas null ou undefined)
Utilisation
L'opérateur ??
est utile dans les situations où il est nécessaire de définir une valeur par défaut uniquement pour null
ou undefined
, tout en conservant les valeurs fausses, telles que 0
ou ""
.
Exemples réels d'utilisation
Exemple 1. Valeurs par défaut dans les objets de configuration :
function configure(settings) {
settings = settings ?? {};
let timeout = settings.timeout ?? 1000;
let color = settings.color ?? 'blue';
// logique de configuration restante
}
Exemple 2. Paramètres par défaut pour les fonctions :
function printMessage(message) {
message = message ?? 'Aucun message fourni';
console.log(message);
}
printMessage(null); // 'Aucun message fourni'
printMessage('Hello'); // 'Hello'
L'utilisation de l'opérateur ??
permet d'écrire du code plus propre et prévisible, surtout dans les situations où il est important de ne considérer que l'absence de valeur (null
ou undefined
).
GO TO FULL VERSION