Mein Informatiklehrer sagt, dass



  • Alles klar! Damit habt ihr mich bestätigt! Konnte ich mir auch eigentlich nicht vorstellen!

    Vielen Dank
    lg, freakC++



  • Nexus schrieb:

    Nein, das ist totaler Schwachsinn. Dem Lehrer würde ich nicht mehr allzu viel glauben.

    Ich glaube nicht, dass du soweit gehen kannst das zu behaupten. Das Thema ist umstritten und eine allgemeine Sichtweise existiert nicht. Du kannst höchstens deine Meinung dazu kundtun.

    Nexus schrieb:

    Gewisse Schleifen werden einfach sehr hässlich, wenn man kein break oder continue benutzt.

    Man könnte dasselbe auch über Schleifen, die mit break continue "geschmückt" sind behaupten.

    Wie gesagt, bei dem Thema streiten sich die Experten und solange es Zwist darüber gibt ist man auf der sicheren Seite (notenmäßig) wenn man die Meinung des Lehrers wiedergibt. Wenn auch nicht freudig. 🙂



  • Nexus schrieb:

    freakC++ schrieb:

    mein Informatiklehrer sagte mir, dass break und continue schlechter Programmierstil sind. Stimm das?

    Nein, das ist totaler Schwachsinn. Dem Lehrer würde ich nicht mehr allzu viel glauben.

    Das kannste laut sagen, wenn man einmal ein Humbug von dem Lehrer hört, sollte man aufpassen und immer irgendwo nachschlagen ob die Aussage stimmt. (Sollte man eigentlich immer^^)



  • Wenn man in einer Schleife, die nur einen Ausgang hat, break braucht, dann ist möglicherweise die Schleifenbedingung falsch formuliert. Natürlich kommt es - wie immer - auch auf den Fall an.

    Die Vermeidung von continue im Schleifenkörper erhöht dann aber die Schachtelung. Da kann man geteilter Meinung sein, ich persönlich finde innerhalb einer Methode sollte die Schachtelung nicht über zwei oder drei Ebenen hinaus gehen.



  • break/continue erlauben sehr schöne und effektive Konstrukte.



  • Mitleid mit Mitleid schrieb:

    break/continue erlauben sehr schöne und effektive Konstrukte.

    Deine Meinung. Andere (vermutlich qualifiziertere) Personen vertreten eine andere Meinung.

    Ich positioniere mich nicht, sondern weise nur darauf hin, dass das Thema umstritten ist. Und allgemeine Aussagen, besonders welche, die "starke" Wörter wie "Schwachsinn" enthalten doch eher mit Vorsicht zu genießen sind. 😉



  • Mitleid schrieb:

    Ich glaube nicht, dass du soweit gehen kannst das zu behaupten. Das Thema ist umstritten und eine allgemeine Sichtweise existiert nicht. Du kannst höchstens deine Meinung dazu kundtun.

    Mitleid schrieb:

    Ich positioniere mich nicht, sondern weise nur darauf hin, dass das Thema umstritten ist. Und allgemeine Aussagen, besonders welche, die "starke" Wörter wie "Schwachsinn" enthalten doch eher mit Vorsicht zu genießen sind. 😉

    Natürlich ist es Schwachsinn, zu pauschalisieren, dass continue und break grundsätzlich und immer schlechter Codestil sind. Mehr habe ich nicht gesagt.



  • Mitleid schrieb:

    Deine Meinung. Andere (vermutlich qualifiziertere) Personen vertreten eine andere Meinung.

    Poste mal bitte einen Link in dem eine für dich qualifizierte Person sich allgemein kritisch gegenüber continue/break äußert. Ich konnte nämlich grade nix finden!

    Oder gib zu mindest mal ein Argument!



  • break und contine sind sehr nützlich, wenn man verrückten Code schreibt.
    http://www.c-plusplus.net/forum/viewtopic-var-p-is-1761346.html#1761346



  • Orakel-Joe schrieb:

    Poste mal bitte einen Link in dem eine für dich qualifizierte Person sich allgemein kritisch gegenüber continue/break äußert. Ich konnte nämlich grade nix finden!

    Oder gib zu mindest mal ein Argument!

    Jetzt muss man hier schon rumgoogeln. 😃

    http://dustingetz.wikidot.com/blog:break-and-continue

    Wie gesagt, mir sind die Argumente völlig schnuppe. Ich behaupte nur, dass wenn ein Lehrer Wert darauf legt, dass keine break/continue Konstruktionen verwendet werden sollen, dann kann er auch Argumente dafür ins Feld führen.

    P.S.: Wenn du noch ein paar Links aus qualifizierter Quelle anführen kannst, warum es besonders positiv ist break und continue einzusetzen, dann wäre der Thread ja vollständig.

    Auch da kann ich dir aushelfen. Der in dem Link zitierte Steve McConnell führt in seinem Buch "Code Complete" auch ein paar sinnvole Konstruktionen mit break/continue vor.



  • Ich finde, beides kann sehr praktisch sein. Da man mit break und continue eigentlich nur hinter das Schleifenende bzw an den Schleifenanfang springen kann, sehe ich da auch nicht, wie dies Lesbarkeit negativ beeinflusst.

    Das break ist praktisch für Schleifen, bei denen die letzte Iteration nur zur Hälfte durchgeführt werden soll. Also in etwa nach folgendem Muster:

    for(...;;...) {
       ...
       if (...) break; // Abbruchbedingung 
       ...
     }
    

    Und continue habe ich neulich auch mal wieder genutzt. Ich sah in dem Fall keine elegantere Möglichkeit.

    Gruß,
    SP



  • Nexus schrieb:

    Nein, das ist totaler Schwachsinn. Dem Lehrer würde ich nicht mehr allzu viel glauben.

    Na, nur weil ein Mensch in einer Sache etwas nicht richtig weiß, heißt das nicht, das er sonst keine Ahnung hat.



  • doch klar, dass C++ler auf break und continue stehen, weil C++ zu kompiliziertem Denken verleitet.



  • Artchi schrieb:

    Na, nur weil ein Mensch in einer Sache etwas nicht richtig weiß, heißt das nicht, das er sonst keine Ahnung hat.

    Nein, das sicher nicht.

    Aber es gibt nun mal einige Lehrer, die nicht wirklich auf dem Laufenden sind, ihre zehnjährigen Skripte benutzen und sich stur gegen den Fortschritt wehren. Das sieht man auch ab und zu wieder an Posts in diesem Forum. Von daher ist es sicher nicht schlecht, wenn man gewisse Dinge in Frage stellt und nicht einfach davon ausgeht, dass Lehrer Recht haben. Es wäre vielleicht besser gewesen, ich hätte geschrieben: "Dem Lehrer würde ich nicht mehr allzu viel blind glauben."

    Und Unwissen in einem Teilgebiet ist ja etwas, aber verallgemeinernde Sätze wie " break und continue sind schlechter Codestil" - dann noch über Dinge wie Stil, wo ein beträchtlicher Teil auch vom Auge des Betrachters abhängt - sind oft ein Hinweis darauf, dass man auch mit anderen Aussagen vorsichtig sein sollte.



  • war schrieb:

    doch klar, dass C++ler auf break und continue stehen, weil C++ zu kompiliziertem Denken verleitet.

    Klar, da C++ ja auch mit Abstand die einzige Sprache ist, die break und continue unterstützt.



  • was der lehrer sagt, entspringt der dogmengruppe "strukturiertes programmieren". und ist für c++ nicht mehr aktuell. durch RAII und durch effiziente funktionsaufrufe hat sich das gravierend geändert.

    return ist gut. continue ist auch gut. break ist nicht so gut. goto ist noch schlechter. künstliche variablen, um break zu sparen, sind noch schlechter.

    aber wenn dein lehrer break nicht mag, dann nimmst du einfach in der schule künstliche variablen, ganz, wie es damals in pascal üblich war.



  • Hi,

    ich muss gestehen, dass bei mir Alarmglocken angehen, wenn ich in fremdem Code break (außer beim "Standard-switch") und continue finde.
    Die schrillen aber nicht "Achtung! Schlechter Code!", sondern "Achtung! Musst Du Dir seeeeehr genau ansehen!".

    Egal, ob es schlecht programmiert ist oder einfach die beste Lösung für eine komplizierte Aufgabe ist (beides schon gesehen): Es ist "immer" komplizierter als Code, der (auf elegante und übersichtliche Weise) ohne auskommt.
    Deshalb denke ich auch jedesmal 10mal darüber nach, bevor ich ein break oder ein continue verwende.

    BTW: Kann es im vorliegenden Fall nicht einfach sein, dass man die gegebene Aufgabe tatsächlich ohne break/continue besser/sauberer hätte lösen können?
    Oder dass der Threadersteller sehr gerne/permanent und ständig mit break/continue arbeitet? (Ich kenne durchaus solche "über-Schleifenbedingungen-mache-ich-mir-später-irgendwo-im-Schleifenkorpus-Gedanken"-Programmierer)
    Natürlich "sind die Pauschalisierungen immer falsch" 😉 ... aber bisweilen sind sie lediglich überspitzte Formulierungen als Gedächtnisstütze oder Motivation zum Umdenken.
    Kann natürlich auch alles ganz anders sein ....

    Gruß,

    Simon2.



  • Ich würde den Lehrer nicht so vorschnell verurteilen.
    Generell gibt es keine bösen Konstrukte, aber es ist vertretbar, wenn Lehrer so etwas vor den Schülern behaupten.
    Und wenn ein Lehrer behauptet, dass break schlechter Stil ist um die Schüler dazu zu bringen break zu vermeiden finde ich das nicht unbedingt verkehrt, auch wenn ich zu der Fraktion gehöre, die break schreibt, bevor sie ein Flag für den Fall einsetzt.
    unüberlegte breaks sind auf jedenfall unschön, wenn es ohne workarrounds wie flags auch ohne break geht ist das im Normalfall auch schöner.

    Außerdem sei froh, dass dein Lehrer den Begriff Stil überhaupt kennt.



  • An alle Gegner von break: wie wollt ihr denn folgendes Problem sinnvoll lösen?

    unsigned int a, b;
    cin>>a;
    cin>>b;
    //a und b sind zwei Zahlen, zwischen denen die erste Primzahl ermittelt werden soll
    for( ; a!=b; ++a)
    {
        if( is_prim(a) ) break;
    }
    

    Sollte man dann lieber a=b setzen, wenn a eine primzahl ist? Dann hat man aber den Wert von a für weitere Berechnungen verändert. Oder die Schleife einfach weiterlaufen lassen und falls is_prim einmal wahr war, nicht wieder auf primzahlen prüfen? Dann wird Rechenzeit vergeudet. Oder eine weitere Variable in die Bedingung des SChleifenkopfes einbauen? Das verkompliziert den ganzen Code doch nur...



  • also wenn man deinen Code nur leicht modifizieren würde, dann so

    for(; a!=b && !is_prim(a); ++a);
    

Anmelden zum Antworten