8.1 Pseudozufallszahlen
Manchmal steht ein Programmierer vor einfachen, so scheint es, Aufgaben: „einen zufälligen Film für den Abend aus einer bestimmten Liste auswählen“, „den Gewinner einer Lotterie auswählen“, „eine Playlist mischen, wenn das Smartphone geschüttelt wird“, „eine zufällige Zahl zur Verschlüsselung einer Nachricht auswählen“, und jedes Mal stellt sich die sehr berechtigte Frage: Wie bekommt man diese zufällige Zahl?
Tatsächlich ist es ziemlich schwierig, eine „wirklich zufällige Zahl“ zu erhalten. Sogar so weit, dass spezielle mathematische Coprozessoren in Computer eingebaut werden, die solche Zahlen mit allen Anforderungen an die „wahre Zufälligkeit“ generieren können.
Daher haben Programmierer ihre eigene Lösung erfunden - pseudozufällige Zahlen. Pseudozufällige Zahlen sind eine bestimmte Sequenz, bei der die Zahlen auf den ersten Blick zufällig erscheinen, aber ein Fachmann kann bei genauer Analyse bestimmte Muster feststellen. Zur Verschlüsselung geheimer Dokumente sind diese Zahlen ungeeignet, aber zur Simulation eines Würfelwurfs im Spiel durchaus.
Es gibt viele Algorithmen zur Generierung einer Sequenz von Pseudozufallszahlen und fast alle von ihnen generieren die nächste zufällige Zahl basierend auf der vorherigen und einigen weiteren Hilfszahlen.
Zum Beispiel gibt dieses Programm 1000 einzigartige Zahlen aus:
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);
}
Übrigens, wir sprechen nicht von Pseudozufallszahlen, sondern von einer Sequenz solcher Zahlen, da man durch das Betrachten einer Zahl nicht verstehen kann, ob sie zufällig ist oder nicht.
Eine zufällige Zahl kann auf verschiedene Weise erhalten werden:
function getNextRandom() {
return 4; # das ist definitiv eine zufällige Zahl (ich habe sie mit Würfeln geworfen)
}
8.2 Der switch-Operator
Der switch
-Operator wird verwendet, um einen von mehreren Codeblöcken basierend auf dem Wert eines Ausdrucks auszuführen. Er ist besonders nützlich, wenn man einen Wert mit mehreren möglichen Optionen vergleichen muss.
Syntax:
switch(expression) {
case value1:
// Code, der ausgeführt wird, wenn expression === value1
break;
case value2:
// Code, der ausgeführt wird, wenn expression === value2
break;
// ...
default:
// Code, der ausgeführt wird, wenn keiner der Werte übereinstimmt
}
Beispiel:
let day = 3;
let dayName;
switch (day) {
case 1:
dayName = "Montag";
break;
case 2:
dayName = "Dienstag";
break;
case 3:
dayName = "Mittwoch";
break;
case 4:
dayName = "Donnerstag";
break;
case 5:
dayName = "Freitag";
break;
case 6:
dayName = "Samstag";
break;
case 7:
dayName = "Sonntag";
break;
default:
dayName = "Ungültiger Tag";
}
console.log(dayName); // "Mittwoch"
8.3 Der ??-Operator
Der ??
-Operator, oder nullish coalescing operator, wird verwendet, um einen Standardwert zuzuweisen, wenn der linke Operand null
oder undefined
ist. Er ermöglicht es, die Anwendung eines Standardwerts für andere „falsy“ Werte wie 0
, false
, oder einen leeren String (""
) zu vermeiden.
Syntax:
let result = value1 ?? value2;
Wenn value1 nicht null
oder undefined
ist, wird result value1 sein. Andernfalls wird result value2 sein.
Beispiele:
let foo = null ?? 'default';
console.log(foo); // 'default'
let bar = 0 ?? 'default';
console.log(bar); // 0 (0 ist nicht null oder undefined)
let baz = undefined ?? 'default';
console.log(baz); // 'default'
Unterschied zum logischen ODER (||)
Der ||
-Operator kann ebenfalls verwendet werden, um einen Standardwert festzulegen, aber er gibt den rechten Operand für alle „falsy“ Werte zurück, wie 0
, ""
, oder NaN
.
Vergleichsbeispiel:
let value = 0 || 'default';
console.log(value); // 'default' (da 0 ein „falsy“ Wert ist)
let value2 = 0 ?? 'default';
console.log(value2); // 0 (da 0 nicht null oder undefined ist)
Anwendung
Der ??
-Operator ist nützlich in Situationen, in denen es wichtig ist, nur das Fehlen eines Wertes (null
oder undefined
) zu berücksichtigen, und „falsy“ Werte wie 0
oder ""
beizubehalten.
Echte Anwendungsbeispiele
Beispiel 1. Standardwerte in Konfigurationsobjekten:
function configure(settings) {
settings = settings ?? {};
let timeout = settings.timeout ?? 1000;
let color = settings.color ?? 'blue';
// restliche Logik zur Konfiguration
}
Beispiel 2. Standardparameter für Funktionen:
function printMessage(message) {
message = message ?? 'Keine Nachricht angegeben';
console.log(message);
}
printMessage(null); // 'Keine Nachricht angegeben'
printMessage('Hallo'); // 'Hallo'
Die Verwendung des ??
-Operators erlaubt es, saubereren und vorhersehbareren Code zu schreiben, besonders in Situationen, in denen es wichtig ist, nur das Fehlen eines Wertes (null
oder undefined
) zu berücksichtigen.
GO TO FULL VERSION