Christian Seiler: Pro/Contra Break in Schleifen

Beitrag lesen

Hallo Christoph,

Die seit anno domini gegen goto angeführten Argumente lassen sich zu einem gewissen Maß auf alle Sprung-Anweisungen übertragen, d.h. break und continue in Schleifen, aber auch multiple return-Anweisungen in einer Funktion und insbesondere auch throw in Sprachen mit expliziter Fehlerbehandlung.

Klar, break/continue/throw sind nichts anderes als etwas abstrahierte goto-Statements. Das ist in meinen Augen aber auch nichts schlimmes, goto per se halte ich nicht für böse. Wenn ich beispielsweise Code habe, der etwas tun soll, am Ende aber zwanngsweise bestimmte Dinge aufräumen soll, dann ist goto hierfür keine schlechte Wahl (andere Programmiersprachen erfinden dafür z.B. "finally", was im Endeffekt auch nur eine Abstraktion ist).

Goto wird eigentlich nur dann problematisch, wenn man Dinge tut, die das Verständnis erschweren. Wenn ein goto (oder entsprechend halt ein break/continue/sonstwas) aber an einer Stelle die einfachste *verständlichste* Möglichkeit ist, etwas zu lösen, dann sollte man davon in meinen Augen durchaus davon gebrauch machen.

Goto ist nur deswegen so extrem verpönt, weil typische Programme von vor Jahrzehnten fast ausschließlich mit Goto geschrieben wurden - und damit der Code sehr unübersichtlich wurde. Wenn man eine Schleife mit Goto nachbaut und dann am besten auch noch wild aus der Schleife heraus und anschließend wieder in die Schleife hineinspringt, dann macht man natürlich etwas falsch und der Code ist Schrott.

Man sollte jedoch nicht davor zurückschrecken, goto in gesunden Dosen dort einzusetzen, wo es wirklich sinnvoll ist: Ans Ende einer Funktion zur Fehlerbehandlung springen, in etwas abstrakterer Form als break/continue, ...

Hängt natürlich auch von der jeweiligen Programmiersprache und den dort enthaltenen Konzepten ab, wie genau man bestimmte Dinge realisiert.

Ferner: Spaghetticode habe ich auch schon mit OOP gesehen, wo verschiedenen Methoden sich komplett wirr gegenseitig aufrufen und keiner mehr durchblickt, was wo wie geschieht - für schlechten Code braucht's kein goto, das bekommen die Leute, die's drauf anlegen, auch anders hin. ;-)

Viele Grüße,
Christian