break und continue im Allgemeinem

swas

Mitglied
Hallo Leute,

zu Beginn meiner Ausbildung hat unser Leher zu uns gesagt, dass wir nie break (Ausnahme bei switch) und continue benutzen sollen. Er ist der Meinung, dass break und continue ein schlechter Programmierstil ist und wenn man break bzw. continue benötigt hat man "unsauber" programmiert.

Ich wollt mal einige Meinungen von euch dazu hören.

Gruß,
swas
 
Hallo swas,
Jo, ich kenne diese Empfindung.
Der Grund diese Mittel zu verneinen ist, dass man das Programm dann nicht mehr in ein Nasi-Schneiderman Struktogramm 1 zu 1 übertragen kann und damit das Programm strenggenommen nicht mehr als "strukturiert programmiert" gilt. Ich selbst wurde auch in meiner Ausbildung diesbezüglich erzogen :)
Ich denke aber es kommt auf die Komplexität an. Denn wenn man nicht mit break oder continue arbeitet und dennoch Teile des Arbeitsflusses beenden bzw überspringen möchte oder gar muss, muss man seine Schleifen um entsprechende Abbruchsbedingungen erweitern, was nicht selten dazuführt dass man dann mit Flaggen arbeitet. Das kann mit unter dann wieder unübersichtlicher wirken, als ein "fluchtartiges Verlassen einer Schleife".
Ich selbst versuche es generell auch zu vermeiden, aber manchmal, bei komplexeren Geschichten, bevor ich mir einen Abbreche und allesmögliche an Abbruchbedingungen mitschleifen muss erlaube ich mir auch mal ein continue oder break.

in diesem Sinne

Takidoso
 
Zuletzt bearbeitet:
Hallo!

Für einen Programmieranfänger gilt das sicherlich! Ansonsten wird er schnell ganz bösen Code produzieren.
Aber irgendwann im Laufe deiner Programmierer-Karriere wirst du die Ausnahmen der Regeln kennenlernen.

Genauso verhält es sich übrigens mit dem vorzeitigen Abbrechen von Funktionen per return - erst mal sieht das unschön aus, aber ganz oft lassen sich damit kompliziertere if else Schachtelungen umgehen, durch die früher oder später keiner mehr durchsteigt...
 
Hi,

frag mal deinen Lehrer wie er aus einer for-Schleife springen will, sobald eine (komplexere) Bedingung erfüllt ist. ;)

Grundsätzlich sind imho break und continue für mich nicht zwangsläufig schlechter Stil, es kommt ganz darauf an wann und wo du diese einsetzt. Genauso bei den verpönten "goto". Es gibt Situationen, in denen ein einfaches goto, break oder continue dir viel Arbeit ersparen und vorallem auch leichter verständlich sind.

Wie würdest du das folgende ohne break und continue lösen?
C:
// Edit-3: <Snip> War Müll :)

Hier noch ein Zitat, welches meiner Meinung nach break und continue recht gut beschreiben:
Like anything else, they're a useful tool if used properly, and a potential nightmare when abused.

// Edit:
Hier noch ein paar Worte von Linus Torvalds, warum im Linux-Kernel so viele gotos verwendet werden: Klick

// Edit-2:
Dieser Post wäre eventuell im Coders Talk Forum besser aufgehoben, es betrifft ja nicht nur Java...

Gruß
BK
 
Zuletzt bearbeitet:
Ja genau das mit dem abuse :)
Also ich finde Dein Beispiel mit der Endlosschleife ist schonmal so einen Abuse :)
 
Zuletzt bearbeitet:
Hmm, hätt ich doch <sarcasm> Tags rumsetzen sollen ;)
Ist halt das Problem wenn man zwangsweise nach einem Beispiel sucht, dann haut man ab und an auch voll daneben ;)

Gruß
BK
 
Hey,
Danke für Eure Antworten.
Ich habe bisher ähnliche Erfahrung gemacht. Find es halt seltsam, dass der Lehrer es uns fast schon als Hexenwerk verkauft hat...
Ich benutze ja break und continue auch ab und an. Bisher überwiegend bei sehr speziellen parse Aufgaben, deren "sauberes" beenden einen riesigen Overhead erzeugen würde.
Wenn man sich die Java Quellen mal so anschaut sind da auch einige breaks und continues teilweise auch diese Labels für Schleifen. Also so Böße kann das ja doch nicht sein.;)

Einwenig off-topic:
Ich habe sogar eine Endlosschleife gesehen die mit for( ; ; ) gemacht wurde. Sowas hab ich bisher noch nie gesehen.

Gruß,
swas
 
Ich hab gerade noch mal in meiner "Schatzkiste der absoluten Kracher" gesucht. Stammt aus meiner Zeit als Übungsleiter einer Java-Vorlesung:

Code:
        // NICHT TUN ******
        final String[] names = new String[] { "Hans", "Kunibert", "Olaf" };
...
        //NIEMALS******
        for (int i = 0; i > -1; i++) {
            try {
                System.out.println(names[i]);
            } catch (final Exception e) {
                break;
            }
        }

Ich war mal so frei, das ganze aufsa Wesentliche zu reduzieren. Mir ist klar, dass bei diesem Studenten noch so einiges anderes schief gelaufen ist - aber es zeigt ganz toll, was passieren kann, wenn man unbedingt das tolles neue break benutzen möchte, was man gerade kennengelernt hat...
 
haha sieht ja klasse aus. Darauf muss man erstmal kommen :D
sag mal ist das für die Vorlesung gewesen als abschreckendes Beispiel, oder kam einer Deiner Studiosos selbst darauf.


OK OK verfolgt man deine Mail natürlich letzteres, wollte nur mal nen Spuch machen :)
 
[...]
Ich habe bisher ähnliche Erfahrung gemacht. Find es halt seltsam, dass der Lehrer es uns fast schon als Hexenwerk verkauft hat...
[...]

Schon mal versucht, einen Programmteil mit continue und break Anweisungen in ein Struktugramm oder Programmablaufplan zu übertragen? ;)

[...]
Ich habe sogar eine Endlosschleife gesehen die mit for( ; ; ) gemacht wurde. Sowas hab ich bisher noch nie gesehen.
[...]
Wenn du dir diese for-Schleife nach den Regeln anguggst, dann ist diese relativ simpel zu verstehen.
Die Syntax ist ja:
for(<INITIALISIERUNG>;<BEDINGUNG>;<INKREMENTIERUNG>)
Lässt du alle Felder frei, dann hast du eine einfache Endlosschleife, da du ja keine Bedingung hast.

Gruß
BK
 
Zurück