5. Unterrichtsblock: Entscheidungen treffen

Bisher läuft dein Programm immer von oben nach unten. Heute lernst du, wie es Entscheidungen trifft: Es führt Code nur aus, wenn eine Bedingung zutrifft. Arbeite weiter in deinem js-projekt.

Boolesche Werte

Ein boolescher Wert ist entweder true (wahr) oder false (falsch). Jeder Vergleich aus dem letzten Block liefert einen booleschen Wert. Er ist die Grundlage jeder Entscheidung.

const alter = 17;
const istVolljaehrig = alter >= 18;

console.log(istVolljaehrig);        // false
console.log(alter === 17);          // true
Ausgabe in der Konsole
false
true

Wahr oder falsch: nicht nur true und false

JavaScript wertet auch andere Werte als wahr oder falsch, wenn eine Bedingung gefragt ist. Falsch sind nur: false, 0, "" (leerer Text), null, undefined und NaN. Alles andere ist wahr. Mit Boolean() kannst du es testen:

console.log(Boolean(""));        // false
console.log(Boolean("Hallo"));   // true
console.log(Boolean(0));         // false
console.log(Boolean("0"));       // true, denn "0" ist ein Text
Ergebnis im Browser

Tipp: Lösche den Text komplett und prüfe erneut.

Logische Operatoren

Mit logischen Operatoren verbindest du mehrere Bedingungen.

OperatorNameBedeutungBeispiel
&&UNDwahr, wenn beide Seiten wahr sindalter >= 18 && hatAusweis
||ODERwahr, wenn mindestens eine Seite wahr ististSamstag || istSonntag
!NICHTdreht wahr und falsch um!istRegen
const alter = 20;
const hatAusweis = true;
const istWochenende = false;

console.log(alter >= 18 && hatAusweis);   // true
console.log(istWochenende || alter < 18); // false
console.log(!istWochenende);              // true
Ausgabe in der Konsole
true
false
true

Schalte A und B ein und aus und beobachte die Ergebnisse:

Ergebnis im Browser

Klicke A oder B an.

Merke: Es gilt: ! zuerst, dann &&, dann ||. Setze im Zweifel Klammern: (a || b) && c.

Aufgabe 1 – Wahrheitswerte vorhersagen

Zeit: ca. 5 Minuten

  1. Lege const a = true, const b = false, const c = true an.
  2. Sage voraus, was a && b, a || b, !a, a && (b || c) und !(a && c) ergeben.
  3. Prüfe mit console.log().

if, else und else if

Mit if führst du einen Codeblock nur aus, wenn die Bedingung wahr ist. Mit else legst du fest, was sonst passiert. Mit else if prüfst du weitere Bedingungen nacheinander.

const alter = 16;

if (alter >= 18) {
  console.log("Du bist volljährig.");
} else {
  console.log("Du bist noch nicht volljährig.");
}
Ausgabe in der Konsole
Du bist noch nicht volljährig.
const stunde = 14;

if (stunde < 10) {
  console.log("Guten Morgen");
} else if (stunde < 18) {
  console.log("Guten Tag");
} else {
  console.log("Guten Abend");
}
Ausgabe in der Konsole
Guten Tag
Ergebnis im Browser
Uhrzeit (0 bis 23):
  • Die Bedingung steht in runden Klammern, der Code in geschweiften.
  • Die Bedingungen werden von oben nach unten geprüft. Der erste Treffer gewinnt, der Rest wird übersprungen.
  • else braucht keine Bedingung und steht immer zuletzt.
Merke: Häufiger Fehler: if (x = 5) mit einem Gleichheitszeichen weist zu, statt zu vergleichen. Schreibe if (x === 5).

Variablen im Block

Was du mit let oder const in den geschweiften Klammern eines if anlegst, gibt es nur dort. Das kennst du schon von lokalen Variablen in Funktionen.

if (true) {
  const gruss = "Hallo";
  console.log(gruss);       // Hallo
}
console.log(gruss);         // Fehler: gruss gibt es hier nicht mehr
Ausgabe in der Konsole
Hallo
Uncaught ReferenceError: gruss is not defined

Aufgabe 2 – Volljährig?

Zeit: ca. 5 Minuten

  1. Lege eine Variable alter an.
  2. Gib mit if und else „Volljährig“ oder „Minderjährig“ aus.
  3. Ergänze eine Stufe mit else if: Ab 16 „Jugendlicher“, ab 18 „Volljährig“, darunter „Kind“.
  4. Teste mit den Werten 12, 16, 17, 18 und 40. Warum ist die Reihenfolge der Bedingungen wichtig?

switch: viele Fälle, ein Wert

Wenn du einen Wert mit vielen festen Möglichkeiten vergleichst, ist switch übersichtlicher als eine lange else if-Kette.

const tag = "Mi";

switch (tag) {
  case "Mo":
    console.log("Wochenstart");
    break;
  case "Mi":
    console.log("Wochenmitte");
    break;
  case "Fr":
    console.log("Fast Wochenende");
    break;
  default:
    console.log("ein normaler Tag");
}
Ausgabe in der Konsole
Wochenmitte
Ergebnis im Browser
Wochentag:
  • Jeder Fall beginnt mit case und endet mit break. Ohne break läuft der nächste Fall einfach weiter.
  • default gilt, wenn kein Fall passt.
  • switch vergleicht streng (===).

Kurzform: der bedingte Operator

Für eine einfache Entscheidung mit zwei Ergebnissen gibt es eine Kurzschreibweise mit ? und ::

const alter = 20;
const status = alter >= 18 ? "volljährig" : "minderjährig";
console.log(status);     // volljährig

Aufgabe 3 – Wochentag

Zeit: ca. 5 Minuten

  1. Lege eine Variable tag mit einem Kürzel ("Mo" bis "So") an.
  2. Schreibe ein switch: Für "Sa" und "So" soll „Wochenende“ erscheinen, für "Fr" „Fast geschafft“, sonst „Arbeitstag“.
  3. Tipp: Zwei Fälle können sich einen Block teilen, wenn du das break beim ersten weglässt.

Abschlussaufgaben

Jetzt wird es anspruchsvoller. Nimm dir Zeit, es müssen nicht alle Aufgaben geschafft werden.

Aufgabe 4 – Kinopreis

Zeit: ca. 15 Minuten

Der Kinopreis hängt von mehreren Bedingungen ab:

  • Normalpreis: 10 Euro
  • Kinder unter 12 zahlen 6 Euro
  • Schüler und Studenten zahlen 8 Euro
  • Dienstag ist Kinotag: Alle zahlen 2 Euro weniger
  1. Lege alter, istSchueler (true/false) und tag als Variablen an.
  2. Berechne den Preis mit if, else if und && / || nach den Regeln.
  3. Gib den Preis auf der Seite aus und teste mindestens fünf verschiedene Kombinationen.
  4. Packe die Berechnung in eine Funktion berechneKinopreis(alter, istSchueler, tag) mit return.

Zusatz: Baue Eingabefelder und einen Button, damit jemand die Daten eingeben kann.

Aufgabe 5 – Schaltjahr

Zeit: ca. 15 Minuten

Ein Jahr ist ein Schaltjahr, wenn es durch 4 teilbar ist, aber nicht durch 100, außer es ist auch durch 400 teilbar. Also ist 2024 ein Schaltjahr, 1900 nicht, 2000 schon.

  1. Schreibe eine Funktion istSchaltjahr(jahr), die true oder false zurückgibt. Tipp: % liefert den Rest, und ein Jahr ist durch 4 teilbar, wenn jahr % 4 === 0 ist.
  2. Teste mit 1900, 2000, 2023, 2024 und 2100.
  3. Gib für jedes Jahr „… ist ein Schaltjahr“ oder „… ist kein Schaltjahr“ aus.

Zusatz: Schreibe ein Zahlenraten: Die Geheimzahl steht in einer Variablen, der Tipp kommt aus einem Eingabefeld. Gib „zu klein“, „zu groß“ oder „richtig“ aus.

Kurz zusammengefasst

Vergleiche liefern true oder false. Mit &&, || und ! verknüpfst du Bedingungen. if, else if und else entscheiden, welcher Code läuft, und switch ist praktisch, wenn du einen Wert mit vielen Fällen vergleichst.