Mit einer while-Schleife kannst du Code so lange wiederholt ausführen, wie eine bestimmte Bedingung erfüllt ist.
Sie wird mit dem Schlüsselwort while geschrieben, gefolgt von einer Bedingung in runden Klammern und einem Block in geschweiften Klammern, der den Schleifenblock enthält.
while (condition) {
// code that is executed repeatedly as long as the condition is true
}
JavaScript hat auch eine do-while-Schleife. Hier wird die Bedingung überprüft, nachdem der Schleifenblock ausgeführt wurde. Das ist nützlich, wenn die Bedingung von Auswertungen abhängt, die im Block vorgenommen werden.
do {
// The code here will always be executed once and then
// repeatedly while the condition is true.
} while (condition);
Innerhalb eines Schleifenblocks kannst du das Schlüsselwort break verwenden, um die Ausführung der Schleife vollständig zu beenden.
Im Gegensatz dazu stoppt das Schlüsselwort continue nur die Ausführung der aktuellen Iteration und fährt mit der nächsten fort.
Mit continue kannst du oft vermeiden, große Teile des Schleifenblocks in eine if-Anweisung zu packen.
let i = 0;
while (i < 100) {
i = i + 2;
if (i % 3 === 0) {
continue;
}
// The code here will only be executed when i was not divisible
// by 3 in the check above.
}
Neben der if-Anweisung hat JavaScript auch eine switch-Anweisung, um Logik bedingt auszuführen.
Sie wird verwendet, wenn eine einzelne Variable mit mehreren Varianten verglichen werden muss.
Der Vergleich erfolgt durch Prüfen auf strikte Gleichheit (===), siehe Konzept Vergleich.
Für eine Variable x hat die switch-Anweisung in JavaScript die folgende Syntax.
switch (x) {
case option1:
// code that is executed when "x === option1" is true
break;
case option2:
// code that is executed when "x === option2" is true
break;
default:
// code that is executed when x does not equal any of the options
}
Der default-Fall ist optional und wird verwendet, wenn du Code ausführen möchtest, falls keine der anderen Optionen zur Variable passt.
Die break-Anweisungen oben sind nötig, weil standardmäßig alle Fälle in JavaScript „durchfallen" (Fallthrough).
Das heißt, ohne eine break-Anweisung würde der gesamte Code in den Fällen unterhalb der ersten passenden Option ausgeführt, obwohl x nicht zu diesen Optionen passte.
Dieses Verhalten „standardmäßig durchfallen" ist eine häufige Fallgrube bei der Verwendung von switch in JavaScript.
Innerhalb einer Funktion kann auch return anstelle von break verwendet werden, um dieses Problem zu vermeiden.
Deine Freundin Li Mei betreibt eine Saftbar, in der sie leckere gemischte Fruchtsäfte verkauft. Du bist ein häufiger Gast in ihrem Laden und hast gemerkt, dass du deiner Freundin das Leben erleichtern könntest. Du beschließt, deine Programmierkenntnisse einzusetzen, um Li Mei bei ihrer Arbeit zu helfen.
Li Mei sagt ihren Gästen gerne vorab, wie lange sie auf einen bestellten Saft von der Karte warten müssen.
Es fällt ihr schwer, sich die genauen Zeiten zu merken, weil das Mixen der Säfte unterschiedlich lange dauert.
'Pure Strawberry Joy' dauert 0,5 Minuten, 'Energizer' und 'Green Garden' dauern jeweils 1,5 Minuten, 'Tropical Island' dauert 3 Minuten und 'All or Nothing' dauert 5 Minuten.
Für alle anderen Getränke (z. B. Sonderangebote) kannst du von einer Zubereitungszeit von 2,5 Minuten ausgehen.
Um deiner Freundin zu helfen, schreibe eine Funktion timeToMixJuice, die einen Saft von der Karte als Argument entgegennimmt und die Anzahl der Minuten zurückgibt, die das Mixen dieses Getränks dauert.
timeToMixJuice('Tropical Island');
// => 3
timeToMixJuice('Berries & Lime');
// => 2.5
Viele von Li Meis Kreationen enthalten Limettenstücke, sei es als Zutat oder als Teil der Dekoration. Wenn sie morgens ihre Schicht beginnt, muss sie deshalb dafür sorgen, dass der Behälter mit Limettenstücken für den kommenden Tag gefüllt ist.
Implementiere die Funktion limesToCut, die die Anzahl der Limettenstücke, die Li Mei schneiden muss, und ein Array entgegennimmt, das den Vorrat an ganzen Limetten darstellt, die sie zur Hand hat.
Aus einer 'small' Limette bekommt sie 6 Stücke, aus einer 'medium' Limette 8 Stücke und aus einer 'large' Limette 10 Stücke.
Sie schneidet die Limetten immer in der Reihenfolge, in der sie in der Liste stehen, beginnend mit dem ersten Eintrag.
Sie macht so lange weiter, bis sie die benötigte Anzahl an Stücken erreicht hat oder bis ihr die Limetten ausgehen.
Li Mei möchte vorab wissen, wie viele Limetten sie schneiden muss.
Die Funktion limesToCut soll die Anzahl der zu schneidenden Limetten zurückgeben.
limesToCut(25, ['small', 'small', 'large', 'medium', 'small']);
// => 4
Li Mei arbeitet immer bis 15 Uhr. Dann übernimmt ihr Mitarbeiter Dmitry. Oft sind Getränke bestellt, aber noch nicht zubereitet, wenn Li Meis Schicht endet. Dmitry bereitet dann die restlichen Säfte zu.
Um die Übergabe zu erleichtern, implementiere eine Funktion remainingOrders, die die Anzahl der Minuten, die in Li Meis Schicht noch übrig sind, und ein Array mit Säften entgegennimmt, die bestellt, aber noch nicht zubereitet wurden.
Die Funktion soll die Bestellungen zurückgeben, mit deren Zubereitung Li Mei vor dem Ende ihres Arbeitstags nicht mehr anfangen kann.
Die verbleibende Zeit in der Schicht ist immer größer als 0. Das Array der zuzubereitenden Säfte ist nie leer. Außerdem werden die Bestellungen in der Reihenfolge zubereitet, in der sie im Array stehen. Wenn Li Mei einen Saft zu mixen beginnt, macht sie ihn immer fertig, auch wenn sie etwas länger arbeiten muss. Wenn keine Bestellungen mehr übrig sind, um die sich Dmitry kümmern muss, soll ein leeres Array zurückgegeben werden.
remainingOrders(5, ['Energizer', 'All or Nothing', 'Green Garden']);
// => ['Green Garden']
Melde dich bei Exercism an, um JavaScript mit 37 Konzepte159 Übungen und echtem menschlichen Mentoring zu lernen und zu meistern, alles kostenlos.