Wie können Endlosschleifen bei der Verwendung von Schleifen vermieden werden?
Wie können Endlosschleifen bei Programmierung vermieden werden?
6 Antworten
Endlosschleifen können durch sicherzustellende Abbruchbedingungen, eine Begrenzung der Durchläufe oder einen Notausstieg mit einer zusätzlichen Bedingung vermieden werden.
Indem Du dir den Code gut überlegst. Eine Faustregel gibt es nicht.
Sorg dafür, dass Du einen Ausstieg aus der Schleife hast und gehe gedanklich jeden möglichen Ablauf durch und prüfe: Wird dieser Ausstieg auch erreicht?
Dieser Ausstieg kann eine vorher bestimmte Bedingung sein, die in der Schleife aktualisiert wird, oder ein expliziter Ausstieg (break) in der Schleife.
Und dann sollte es auch UnitTests geben, das verhindert nicht, dass es in Zukunft doch einen Fehler gibt, aber es verhindert, dass Du eine durch UnitTests abgedeckte Funktion später kaputt machst.
Durch Sorgfalt.
Vor der Schleife sollte man die Bedingung auf neutral setzen und sich nicht darauf verlassen, dass das anderswo im Programm korrekt gemacht wurde. Wenn du z.B. eine Schleife durchläufst, bis ein Zähler auf 10 ist und er von einem anderen Durchlauf schon auf 11 ist, dann Gute Nacht.
Gleitkommazahlen sollte man nicht auf = 0 prüfen, wegen Rundungsfehlern, sondern auf einen Maximalwert, <= 10¹⁰ z.B.
Kommt halt immer darauf an, was die Abbruchbedungung ist.
Indem man bei jedem Durchgang der Schleife prüft, ob eine der Abbruchbedingungen bereits erfüllt ist, und inden man auch auf Werte prüft, die man eigentlich nicht erwartet
Indem man doppelt und dreifach prüft, ob die Abbruchbedingung in jedem Fall in endlicher Zeit erfüllt sein wird.
Und wenn man sich da nicht 1000%-ig sicher ist, indem man eine zweite Abbruchbedingung vorsieht, die die Schleife nach x Durchläufen oder y Millisekunden garantiert beendet.