A
array123
Gast
Die Frage steht oben.
Folge dem Video um zu sehen, wie unsere Website als Web-App auf dem Startbildschirm installiert werden kann.
Anmerkung: Diese Funktion ist in einigen Browsern möglicherweise nicht verfügbar.
auch wenn ich es nicht ganz verstehe, in Java gibt es nocharray123 schrieb:Da habe ich mich aber gefragt, ob es Schleifen gibt, die sich nicht automatisch beenden und trotzdem die Schleife durchlaufen und am Ende erst abbrechen.
continue
um den einzelnen Schleifendurchlauf zu skippen, aber die Schleife danach weiter auszuführen. Die Semantik und der Zweck von break
ist aber eben die gesamte Schleife abzubrechen. Wenn das eine Programmiersprache nicht so machen würde, dann wäre es "seltsam"ich würde es eher als "infront-of-tft-major-bug-by-design" definieren und die jeweilige programmiersprache tunlichst meiden. 😀abcddcba schrieb:..........Wenn das eine Programmiersprache nicht so machen würde, dann wäre es "seltsam"
Es wird doch bei jeder Iteration immer die Bedingung geprüft, dessen Wahrheitswert kannst allein du beeinflussen. Auch ein break braucht man fast nie. Die Schleife läuft bis zur Abbruchbedingung.array123 schrieb:Da habe ich mich aber gefragt, ob es Schleifen gibt, die sich nicht automatisch beenden und trotzdem die Schleife durchlaufen und am Ende erst abbrechen.
Die Antwort darauf ist relativ simpel: Nein. Schleifen die sich "nicht automatisch beenden" können nicht "am Ende erst abbrechen" - das ist ein inhaltlicher Widerspruch.array123 schrieb:Da habe ich mich aber gefragt, ob es Schleifen gibt, die sich nicht automatisch beenden und trotzdem die Schleife durchlaufen und am Ende erst abbrechen.
Das ist kompletter Quatsch. Ohne break müsste man sich in vielen Fällen mit einer Hilfsvariable (z.B. “abort) behelfen, die man nicht nur in der Schleifenbedungung sondern auch oft noch im Schleifenrumpf abfragen müsste. Das macht den Code auf jeden Fall unübersichtlicher und in vielen Fällen auch langsamer.MichiSauer schrieb:Aber im Grunde hatte meine Lehrer damals recht:
Wer eine Schleife unterbrechen muss hat schlampig programmiert.
So habe ich das auch verstanden, und mich auch schon amüsiert, was Leute hier alles hineininterpretieren.R00kie schrieb:Ich interpretiere die Frage so, dass der TE sichergehen möchte, dass die Verwendung von break immer das erwartete Ergebnis bringt und die Schleife verlassen wird.
Die C-Programmierer werden sagen: Logo, geht ja nicht anders!
Klassisches Beispiel ist eine Schleife die von irgendeinem Stream liest (File, socket, etc.) und mittendrin gibt es einen Fehler (z.B. weil die Netzverbindung unterbrochen ist). Meist hat man ja eine while Schleife, die das reguläre Ende (z.B. feof(f) im Falle einer Datei) prüft. Das könnte man dann in while(!feof(f) && !error) umwandeln.Renegade334 schrieb:Mir fällt gerade kein konkretes Beispiel ein, bei dem man eine Hilfsvariable oder ein break bräuchte
Das geht immer dann, wenn Du eben nichts mehr aufräumen musst. Im obigen Beispiel wird man ggf. noch die Datei mit fclose schließen wollen/müssen.Renegade334 schrieb:Generell würde ich aber statt break lieber ein return nutzen um einen Status zurückzugeben, aber das ist vermutlich Geschmackssache.
Gerade in C, wo man eben keine automatischen Destruktoren, Exception Handling, etc. hat, kann ein bewusster goto Einsatz übersichtlicher und sicherer sein.Renegade334 schrieb:goto ist Spaghetti Code und habe ich glücklicherweise seit altem VB oder cmd/bash Scripts nicht mehr gesehen
Dann schau dir mal Assembler an. Nur sind es dort bedingte Sprünge, aber ebenso schwer zu lesen. Bei Assembler muss das aber so.Renegade334 schrieb:goto ist Spaghetti Code und habe ich glücklicherweise seit altem VB oder cmd/bash Scripts nicht mehr gesehen
Du meinst sowas in der Art?array123 schrieb:gramm auf eines dieser breaks zutrifft und die Bedingung erfüllt ist, beendet er die Schleife automatisch.
Da habe ich mich aber gefragt, ob es Schleifen gibt, die sich nicht automatisch beenden und trotzdem die Schleife durchlaufen und am Ende erst abbrechen.
...
int abbrechen = 0;
for_while_schleife( [ ... ] ) {
if( [gut_1] )
;
else
abbrechen++;
if( [gut_2] )
;
else
abbrechen++;
if(abbrechen)
break;
}
...
dem widerspreche ich aber vehement... kein code MUSS unverständlich sein... selbst in assembler hast du die möglichkeit zu kommentieren und ein schönes "bilderbuch" aus dem code zu machen, sodass es sogar (ohne abwertend wirken zu wollen, ledigleich ein beispiel zu einem völlig anderen arbeitsfeld der gleichen branche) ein webdesigner versteht...scooter010 schrieb:Dann schau dir mal Assembler an. Nur sind es dort bedingte Sprünge, aber ebenso schwer zu lesen. Bei Assembler muss das aber so.
Ist das so? Ich mache sehr vieles sowieso direkt mit map/reduce/filter, aber wenn wir mal rein bei Schleifen bleiben, was ist, wenn ich z.B. wissen will, ob eine Person vermisst wird?MichiSauer schrieb:Aber im Grunde hatte meine Lehrer damals recht:
Wer eine Schleife unterbrechen muss hat schlampig programmiert.
def somebody_missing?(persons)
persons.each do |person|
if person.missing?
return true
end
end
return false
end
Das war ja auch mein explizites BeispielTomH22 schrieb:Klassisches Beispiel ist eine Schleife die von irgendeinem Stream liest (File, socket, etc.) und mittendrin gibt es einen Fehler (z.B. weil die Netzverbindung unterbrochen ist).
Musste ich leider oft genug. Das hat meine Abneigung dagegen nur verstärkt.scooter010 schrieb:Dann schau dir mal Assembler an. Nur sind es dort bedingte Sprünge, aber ebenso schwer zu lesen. Bei Assembler muss das aber so.
MichiSauer schrieb:Wenn ihr Break in einer Schleife braucht, habt ihr die Bedingung nicht korrekt gesetzt oder eure Annahme war falsch.
mental.dIseASe schrieb:Das habe ich in der Schule auch mal so gelernt. [..]Wenn man das so dogmatisch durchzieht, leidet aber irgendwann die Übersichtlichkeit/Lesbarkeit und damit die Wartbarkeit. [...] Da gehen dann auch mal break, continue, throw oder return in meiner Java-Welt.
Hier wäre ich vorsichtig. Es ist mehr als gültig, wenn man eine Schleife zum Beispiel aus Performance-Gründen vorzeitig beendet, wenn man bereits alle Informationen hat die man braucht. Breaks sind etwas Gutes und nichts, was man vermeiden sollte.MichiSauer schrieb:Abbruchbedingungen heute halt oft ausschließlich über break definiert und das ist halt in 99% der Fälle unnötig
kannst du das bitte etwas ausführen ?MichiSauer schrieb:wenn man die Abbruchbedingungen der Schleife vorher ordentlich definiert.
Ich fand die Erwähnung von Rekursionen recht gut, weil sie nicht ohne weiteres durch breaks verlassen werden können. Allerdings zählen diese nicht zu den Schleifen 🙂. Warum ist Stoff für einen anderen Thread.tRITON schrieb:label: jmp label; über inline