Loops
Bisher sind unsere Programme geradlinig von oben nach unten durchgelaufen. Manchmal möchte man in einem Programm aber den selben Code häufig hintereinander ausführen. Dafür gibt es sogenannte Loops (Schleifen).
while Loops
Mit einem while Loop können wir ein Stück Code ausführen wenn eine Bedingung gilt - genau wie mit einem if. Allerdings führt while den Code immer und immer wieder aus - solange, bis die Bedingung nicht mehr true ist. Ein Beispiel:
let number = 1
while (number <= 100) {
console.log(number)
number = number + 1
}
dieses Programm gibt die Zahlen von 0 bis 100 aufsteigend in die Konsole aus.
while führt Code stumpf so lange aus, bis die Bedingung nicht mehr gilt.
Das bedeutet, dass while nie aufhört Code zu wiederholen, wenn der wiederholte Code nicht irgendwann dafür sorgt, dass die Bedingung false wird.
Wenn wir zum Beispiel in unserem Beispiel oben das number = number + 1 vergessen hätten, hätten wir eine unendliche Schleife geschrieben:
let number = 1
// Diese Schleife wird für immer immer wieder 1 in die Konsole schreiben
while (number <= 100) {
console.log(number)
}
Man liest allgemein
while (A) {
B
}
als "Solange A gilt, mach immer wieder B".
break & continue
Im Bezug auf Loops gibt es zwei weitere nützliche Statements, welche innerhalb (also im Code zwischen den {}) von Loops benutzt werden können:
break bricht die komplette Schleife sofort ab - das heißt dass die aktuelle Wiederholung abgebrochen wird und danach auch keine weitere Wiederholung folgt. Der Code nach der Schleife wird regulär weiter ausgeführt:
let number = 0
while (number < 100) {
number = number + 1
if (number > 3) {
// break springt von hier...
break
}
console.log(number)
}
// ...hierher
console.log("Fertig!")
Dieses Programm gibt
1
2
3
Fertig!
aus.
Das continue Statement ist ähnlich. Allerdings bricht es nur die aktuelle Schleifenwiederholung ab, nicht die gessamte Schleife. Es "springt" sozusagen direkt zur nächsten Schleifenwiederholung:
let number = 0
while (number < 10) {
number = number + 1
console.log(number)
// Falls number gerade ist, spring zum nächsten Durchlauf
if (number % 2 == 0) {
continue
}
console.log("ist ungerade")
}
Dieses Programm gibt
1
ist ungerade
2
3
ist ungerade
4
5
ist ungerade
6
7
ist ungerade
8
9
ist ungerade
aus.
Übung
Collatz-Folge
In der Mathematik gibt es die sogenannte Collatz-Folge. Um sie zu bilden, startet man mit einer beliebigen positiven ganzen Zahl. Dann wiederholt man die folgenden Schritte immer wieder:
- Wenn die Zahl gerade ist, wird sie halbiert
- Wenn die Zahl ungerade ist, wird sie verdreifacht und dann 1 addiert
Wen man zum Beispiel mit der Zahl 5 anfängt ergibt sich:
5, 16, 8, 4, 2, 1, 4, 2, 1, 4, 2, 1,....
Sobald 1, 4 oder 2 erreicht sind, wiederholt sich die 4, 2, 1 Folge unendlich weiter.
Schreibe ein Programm, welches die Collatz-Folge angefangen mit der Zahl 123 ausgibt und aufhört, sobald die unendlich wiederholende 4, 2, 1 Folge erreicht ist.
Die größte Zahl die dein Programm auf dem Weg ausgeben sollte ist 628
Bis heute wird zwar vermutet, dass jede ganze positive Zahl irgendwann in der 4, 2, 1 Folge landet, bewiesen ist es aber noch nicht. Mit Computerprogrammen wie dem, das du gerade geschrieben hast, hat man allerdings schon sehr sehr viele Zahlen ausprobiert und noch kein Gegenbeispiel gefunden.