Abschnitt 4 · Lektion 3
break und continue
Eine Schleife läuft normalerweise bis zum Ende ihrer Bedingung. Zwei Wörter erlauben dir, das abzukürzen.
break
<h1>Ausgabe</h1>
<p>Was dieses Beispiel tut, steht in der Console.</p> // Die Suche hört auf, sobald sie gefunden hat.
for (let i = 1; i <= 20; i++) {
console.log("Prüfe", i);
if (i % 7 === 0) {
console.log("Gefunden:", i);
break;
}
}
console.log("Nach der Schleife."); break beendet die Schleife sofort. Der Rest des Blocks läuft nicht mehr, weitere Durchläufe gibt es nicht, es geht mit der ersten Zeile nach der Schleife weiter.
Der klassische Fall ist die Suche: Du gehst eine Liste durch, bis du gefunden hast, was du suchst. Danach weiterzusuchen wäre nicht falsch, nur sinnlos. Bei zwanzig Einträgen merkt das niemand, bei zwanzigtausend schon.
Im Beispiel siehst du, dass die Ausgabe „Prüfe” bei 7 aufhört. Die Zahlen 8 bis 20 kommen gar nicht mehr dran.
Du kennst break schon aus dem switch, und es ist dasselbe Wort mit derselben Bedeutung: Verlass das Konstrukt, in dem du gerade steckst.
continue
<h1>Ausgabe</h1>
<p>Was dieses Beispiel tut, steht in der Console.</p> let verarbeitet = 0;
let uebersprungen = 0;
for (let i = 1; i <= 10; i++) {
if (i % 3 === 0) {
uebersprungen++;
continue;
}
verarbeitet++;
console.log("Verarbeitet:", i);
}
console.log("Verarbeitet:", verarbeitet, "Übersprungen:", uebersprungen); continue überspringt den Rest des aktuellen Durchlaufs und macht mit dem nächsten weiter. Die Schleife selbst läuft normal zu Ende.
Der typische Einsatz ist das Aussortieren: Alles, was nicht in Frage kommt, wird oben abgefangen, und der Rest des Blocks kümmert sich nur noch um die interessanten Fälle.
Das ist derselbe Gedanke wie der frühe Ausstieg aus Lektion 3.5, nur eine Ebene tiefer: Sonderfälle nach oben, danach steht der eigentliche Inhalt ohne zusätzliche Einrückung da.
Beachte im Beispiel, dass die Zählung vor dem continue steht. Alles danach wird übersprungen, auch das, was du noch erledigen wolltest.
Die Falle bei continue in einer while-Schleife
<h1>Ausgabe</h1>
<p>Was dieses Beispiel tut, steht in der Console.</p> let i = 0;
let notbremse = 0;
while (i < 8 && notbremse < 10) {
notbremse++;
if (i === 3) {
// Hier fehlt die Erhöhung von i. Das continue springt an ihr
// vorbei, deshalb bleibt i auf 3 stehen.
continue;
}
console.log("i steht auf", i);
i++;
}
console.log("Ende. i steht auf", i, "und die Notbremse griff bei", notbremse); Das ist der einzige wirklich gefährliche Punkt dieser Lektion.
Bei einer for-Schleife läuft der Schritt aus der Klammer auch dann, wenn du continue benutzt. Der Zähler geht also weiter hoch, und alles ist gut.
Bei einer while-Schleife steht die Erhöhung irgendwo im Rumpf. Springt continue daran vorbei, ändert sich der geprüfte Wert nicht, die Bedingung bleibt wahr, und das Programm hängt.
Im Beispiel bleibt i bei 3 stehen und nur die Notbremse beendet das Ganze.
Die Regel: In einer while-Schleife gehört die Erhöhung vor jedes continue. Oder du nimmst gleich eine for-Schleife, die das Problem nicht hat.
Wann ein return besser ist
<h1>Ausgabe</h1>
<p>Was dieses Beispiel tut, steht in der Console.</p> // Mit break: das Ergebnis muss in einer Variablen aufgefangen werden.
let gefunden = 0;
for (let i = 1; i <= 20; i++) {
if (i % 7 === 0) {
gefunden = i;
break;
}
}
console.log("Mit break: ", gefunden);
// Mit return: die Funktion ist an dieser Stelle fertig, Punkt.
function ersteVielfache(teiler) {
for (let i = 1; i <= 20; i++) {
if (i % teiler === 0) {
return i;
}
}
return 0;
}
console.log("Mit return:", ersteVielfache(7)); Beide Fassungen im Beispiel tun dasselbe. Die zweite ist kürzer und liest sich besser, und der Grund ist der Umgang mit dem Ergebnis.
Mit break musst du das Gefundene in einer Variablen auffangen, die du vorher anlegst und hinterher ausliest. Diese Variable existiert nur, weil break keinen Wert zurückgeben kann.
Mit return fällt das weg. Die Funktion ist an der Stelle fertig, an der sie gefunden hat, und das Ergebnis steht direkt da. Der Rest der Schleife wird ebenso übersprungen wie bei break, denn return verlässt die ganze Funktion.
Faustregel: Sobald eine Schleife mehr als ein break hat oder ihr Ergebnis in einer Hilfsvariablen aufgefangen wird, ist sie ein Kandidat für eine eigene Funktion. Wie man die schreibt, ist Abschnitt 5. Bis dahin siehst du in diesem Kurs beide Formen.
Ein letzter Hinweis: break und continue wirken immer auf die innerste Schleife, in der sie stehen. Was das bei zwei ineinanderliegenden Schleifen bedeutet, ist Thema der nächsten Lektion.
Zum Mitnehmen
break beendet die ganze Schleife, continue nur den aktuellen Durchlauf. Beide wirken immer auf die innerste Schleife, in der sie stehen.
Jetzt du
Basis Konto, kostenlosZu dieser Lektion gehört eine Aufgabe. Du schreibst den Code selbst, und nach jedem Lauf sagt dir eine Prüfliste, was schon stimmt.
Dafür brauchst du das Basis Konto. Es kostet nichts, und ein Passwort gibt es auch nicht.
Was in dieser Lektion steckt
-
Artikel mit 4 Beispielen zum Ausprobieren
Steht hier, ohne Konto lesbar.
-
Aufgabe im Editor, direkt im Browser geprüft
Öffnet sich mit dem Basis Konto.