Читать книгу JavaScript für Ungeduldige - Cay Horstmann - Страница 93
2.11break und continue
ОглавлениеManchmal wollen Sie eine Schleife verlassen, sobald Sie ein bestimmtes Ziel erreicht haben. Nehmen wir an, Sie suchen nach der Position des ersten negativen Elements in einem Array:
let i = 0
while (i < arr.length) {
if (arr[i] < 0) . . .
...
}
Sobald das erste negative Element gefunden ist, wollen Sie die Schleife verlassen, damit i den Wert der Position dieses Elements behält. Das können Sie mit der Anweisung break erreichen:
let i = 0
while (i < arr.length) {
if (arr[i] < 0) break
i++
}
// Wird nach break oder dem regulären Ende der Schleife erreicht
Die Anweisung break ist niemals notwendig. Stattdessen können Sie auch immer eine boolesche Variable verwenden, um das Beenden der Schleife zu steuern. Oft werden solche Variablen done oder found genannt:
let i = 0
let found = false
while (!found && i < arr.length) {
if (arr[i] < 0) {
found = true
} else {
i++
}
}
Ebenso wie in Java gibt es auch in JavaScript break-Anweisungen mit Label, mit denen es möglich ist, aus mehreren verschachtelten Schleifen auszubrechen. Nehmen wir an, Sie möchten die Position des ersten negativen Elements in einem zweidimensionalen Array finden. Wenn Sie dieses Element erreicht haben, müssen Sie zwei Schleifen verlassen. Fügen Sie dazu ein Label (also einen Bezeichner gefolgt von einem Doppelpunkt) vor der äußeren Schleife hinzu. Eine break-Anweisung mit Label springt hinter die mit dem Label versehene Schleife:
let i = 0
let j = 0
outer:
while (i < arr.length) {
while (j < arr[i].length) {
if (arr[i][j] < 0) break outer
j++
}
i++
j = 0
}
// Wird nach break outer oder dem regulären Ende beider Schleifen erreicht
Das Label der break-Anweisung muss sich dabei in derselben Zeile befinden wie das Schlüsselwort break. Mit Labels versehene break-Anweisungen sind jedoch nicht gebräuchlich.
Außerdem gibt es noch die Anweisung continue, die ebenso wie break den regulären Steuerungsfluss unterbricht. Sie übergibt die Steuerung an das Ende der innersten einschließenden Schleife. Das folgende Beispiel berechnet den Durchschnitt der positiven Elemente eines Arrays:
let count = 0
let sum = 0
for (let i = 0; i < arr.length; i++) {
if (arr[i] <= 0) continue
count++
sum += arr[i]
}
let avg = count === 0 ? 0 : sum / count
Ist ein Element nicht positiv, springt die Anweisung continue unmittelbar in den Kopf der Schleife und überspringt den Rest der aktuellen Iteration.
In einer for-Schleife wie in dem vorstehenden Beispiel springt die Anweisung continue zum Aktualisierungsteil der Schleife.
Es gibt auch eine Version von continue mit Label, die zum Ende der Schleife mit dem übereinstimmenden Label springt. Solche Anweisungen sind jedoch äußerst unüblich.
Viele Programmierer halten break und continue für verwirrend. Da sich diese Anweisungen auch einfach vermeiden lassen, verwende ich sie in diesem Buch nicht.