if/else - Bedingte Logik in JavaScript
if/else - Bedingte Logik
Mit bedingter Logik kann dein Programm Entscheidungen treffen. Je nach Situation wird unterschiedlicher Code ausgeführt – genau wie im echten Leben: “Wenn es regnet, nimm einen Schirm mit.”
Die Grundstruktur
if (bedingung) {
// Code, der ausgeführt wird, wenn bedingung true ist
}
Einfaches Beispiel
const age = 20;
if (age >= 18) {
console.log("Du bist volljährig! 🎉");
}
Die Bedingung age >= 18 wird ausgewertet:
- Wenn
true→ Code wird ausgeführt - Wenn
false→ Code wird übersprungen
if…else
Für “wenn…dann…sonst” Situationen:
const age = 15;
if (age >= 18) {
console.log("Willkommen!");
} else {
console.log("Sorry, nur für Erwachsene.");
}
Praktisches Beispiel: Login-Check
const isLoggedIn = false;
if (isLoggedIn) {
console.log("Willkommen zurück!");
showDashboard();
} else {
console.log("Bitte einloggen");
showLoginForm();
}
if…else if…else
Für mehrere Bedingungen:
const score = 85;
if (score >= 90) {
console.log("Note: A - Ausgezeichnet! 🌟");
} else if (score >= 80) {
console.log("Note: B - Sehr gut! 👍");
} else if (score >= 70) {
console.log("Note: C - Gut");
} else if (score >= 60) {
console.log("Note: D - Ausreichend");
} else {
console.log("Note: F - Nicht bestanden 😢");
}
Reihenfolge ist wichtig!
const temp = 35;
// ❌ Falsch - erste Bedingung ist immer true für warme Temps
if (temp > 0) {
console.log("Es ist warm");
} else if (temp > 30) {
console.log("Es ist heiß"); // Wird nie erreicht!
}
// ✅ Richtig - spezifischere Bedingung zuerst
if (temp > 30) {
console.log("Es ist heiß! 🔥");
} else if (temp > 0) {
console.log("Es ist warm");
} else {
console.log("Es ist kalt! ❄️");
}
Bedingungen richtig schreiben
Vergleichsoperatoren
const x = 10;
x > 5 // größer als
x < 5 // kleiner als
x >= 10 // größer oder gleich
x <= 10 // kleiner oder gleich
x === 10 // gleich (Wert UND Typ)
x !== 5 // ungleich (Wert ODER Typ)
Logische Operatoren
const age = 25;
const hasLicense = true;
const isSober = true;
// UND (&&) - alle müssen true sein
if (age >= 18 && hasLicense && isSober) {
console.log("Darfst fahren 🚗");
}
// ODER (||) - mindestens eines muss true sein
const isWeekend = false;
const isHoliday = true;
if (isWeekend || isHoliday) {
console.log("Frei! 🎉");
}
// NICHT (!) - kehrt um
const isBlocked = false;
if (!isBlocked) {
console.log("Zugriff erlaubt");
}
Kombinierte Bedingungen
const user = {
age: 25,
role: "admin",
isActive: true
};
// Komplexe Prüfung
if ((user.age >= 18 && user.isActive) || user.role === "admin") {
console.log("Zugriff auf Admin-Bereich erlaubt");
}
// Besser lesbar mit Zwischenvariablen
const isAdult = user.age >= 18;
const isActiveUser = user.isActive;
const isAdmin = user.role === "admin";
if ((isAdult && isActiveUser) || isAdmin) {
console.log("Zugriff erlaubt");
}
Truthy und Falsy
JavaScript wertet auch nicht-boolesche Werte als true oder false aus:
// Falsy Werte (werden zu false)
if (false) // false
if (0) // false
if (-0) // false
if ("") // false
if (null) // false
if (undefined) // false
if (NaN) // false
// Truthy Werte (werden zu true)
if (true) // true
if (1) // true
if (-1) // true
if ("hello") // true
if ([]) // true (leeres Array!)
if ({}) // true (leeres Object!)
Praktische Anwendung
const username = "";
// Prüfen ob String leer ist
if (username) {
console.log(`Hallo, ${username}!`);
} else {
console.log("Bitte Username eingeben");
}
// Array prüfen
const items = [];
if (items.length) { // 0 ist falsy
console.log("Items vorhanden");
} else {
console.log("Keine Items");
}
Verschachtelte if-Statements
const user = {
isLoggedIn: true,
role: "admin",
permissions: ["read", "write", "delete"]
};
if (user.isLoggedIn) {
console.log("User eingeloggt");
if (user.role === "admin") {
console.log("Admin-Rechte erkannt");
if (user.permissions.includes("delete")) {
console.log("Löschrechte vorhanden");
}
}
}
// Besser: Early Return Pattern (in Funktionen)
function checkAccess(user) {
if (!user.isLoggedIn) {
return "Nicht eingeloggt";
}
if (user.role !== "admin") {
return "Keine Admin-Rechte";
}
if (!user.permissions.includes("delete")) {
return "Keine Löschrechte";
}
return "Voller Zugriff";
}
Ternärer Operator
Kurzschreibweise für einfache if/else:
// Statt:
let message;
if (isLoggedIn) {
message = "Willkommen!";
} else {
message = "Bitte einloggen";
}
// Schreibe:
const message = isLoggedIn ? "Willkommen!" : "Bitte einloggen";
Wann verwenden?
// ✅ Gut - einfache Zuweisung
const status = age >= 18 ? "adult" : "minor";
const greeting = `Hallo, ${name || "Gast"}!`;
// ✅ Gut - in Template Literals
const html = `
<div class="${isActive ? 'active' : 'inactive'}">
${count} ${count === 1 ? 'Item' : 'Items'}
</div>
`;
// ❌ Vermeiden - zu komplex
const result = a > b ? (c > d ? "A" : "B") : (e > f ? "C" : "D");
// Besser als if/else schreiben
Kurzschluss-Auswertung
JavaScript wertet logische Ausdrücke “kurz” aus:
// && gibt den ersten falsy Wert oder den letzten Wert zurück
console.log(true && "Hallo"); // "Hallo"
console.log(false && "Hallo"); // false
// || gibt den ersten truthy Wert oder den letzten Wert zurück
console.log(false || "Default"); // "Default"
console.log("Wert" || "Default"); // "Wert"
Praktische Anwendung
// Bedingtes Ausführen mit &&
const isAdmin = true;
isAdmin && console.log("Admin-Panel anzeigen");
// Statt:
if (isAdmin) {
console.log("Admin-Panel anzeigen");
}
// Default-Werte mit ||
const userColor = null;
const color = userColor || "blue";
// Besser: Nullish Coalescing ??
const count = 0;
console.log(count || 10); // 10 (0 ist falsy!)
console.log(count ?? 10); // 0 (nur null/undefined werden ersetzt)
Praktische Beispiele
Formular-Validierung
function validateForm(data) {
const errors = [];
if (!data.email) {
errors.push("E-Mail ist erforderlich");
} else if (!data.email.includes("@")) {
errors.push("Ungültige E-Mail-Adresse");
}
if (!data.password) {
errors.push("Passwort ist erforderlich");
} else if (data.password.length < 8) {
errors.push("Passwort muss mindestens 8 Zeichen haben");
}
if (data.password !== data.confirmPassword) {
errors.push("Passwörter stimmen nicht überein");
}
if (errors.length > 0) {
return { valid: false, errors };
}
return { valid: true, errors: [] };
}
Preis-Kalkulator
function calculatePrice(basePrice, userType, quantity) {
let discount = 0;
// Rabatt nach Usertyp
if (userType === "vip") {
discount = 0.2; // 20%
} else if (userType === "member") {
discount = 0.1; // 10%
}
// Mengenrabatt
if (quantity >= 100) {
discount += 0.15;
} else if (quantity >= 50) {
discount += 0.1;
} else if (quantity >= 10) {
discount += 0.05;
}
// Maximum 30% Rabatt
if (discount > 0.3) {
discount = 0.3;
}
const subtotal = basePrice * quantity;
const discountAmount = subtotal * discount;
const total = subtotal - discountAmount;
return {
subtotal,
discount: discount * 100 + "%",
discountAmount,
total
};
}
console.log(calculatePrice(10, "vip", 50));
// { subtotal: 500, discount: "30%", discountAmount: 150, total: 350 }
Spiellogik
function evaluateHand(cards) {
const sum = cards.reduce((a, b) => a + b, 0);
if (sum > 21) {
return { status: "bust", message: "Überkauft! 💥" };
}
if (sum === 21) {
return { status: "blackjack", message: "Blackjack! 🎰" };
}
if (sum >= 17) {
return { status: "stand", message: "Gute Hand!" };
}
return { status: "hit", message: "Noch eine Karte?" };
}
Best Practices
1. Positive Bedingungen bevorzugen
// ❌ Schwer zu lesen
if (!isNotLoggedIn) { }
// ✅ Besser
if (isLoggedIn) { }
2. Early Return verwenden
// ❌ Tief verschachtelt
function process(user) {
if (user) {
if (user.isActive) {
if (user.hasPermission) {
// tue etwas
}
}
}
}
// ✅ Flach mit Early Returns
function process(user) {
if (!user) return;
if (!user.isActive) return;
if (!user.hasPermission) return;
// tue etwas
}
3. Klammern immer verwenden
// ❌ Riskant
if (isAdmin)
deleteUser();
sendEmail(); // Wird IMMER ausgeführt!
// ✅ Sicher
if (isAdmin) {
deleteUser();
sendEmail();
}
4. Komplexe Bedingungen auslagern
// ❌ Schwer lesbar
if (user.age >= 18 && user.country === "DE" && !user.isBanned && user.hasVerifiedEmail) {
// ...
}
// ✅ Lesbar
const canAccess =
user.age >= 18 &&
user.country === "DE" &&
!user.isBanned &&
user.hasVerifiedEmail;
if (canAccess) {
// ...
}
Zusammenfassung
| Konzept | Verwendung |
|---|---|
if | Einzelne Bedingung |
if...else | Zwei Alternativen |
if...else if...else | Mehrere Alternativen |
? : | Einfache Zuweisung |
&& | Bedingtes Ausführen |
|| | Default-Werte |
?? | Null/Undefined Check |
💡 Merke: Halte deine Bedingungen einfach und lesbar. Bei komplexer Logik: Zwischenvariablen verwenden und Early Returns nutzen!