Schleifen in der Mitte verlassen

  • Kira schrieb:

    Wenn du mehrere Codezeilen hast, ist da aber normalerweise trotzdem nur EINE da für eine if-bedingung. Oder wie würde bei dir eine derartige if-bedingung mit mehreren Codezeilen aussehen?

    Wenn es nicht die erste Zeile ist, die den Wert für den Schleifenabbruch liefert, dann funktioniert dieser Ansatz ohne ausgelagerte Methode oder Funktion und ohne Code-Doppelung nicht mehr.
    „Meine Komplikation hatte eine Komplikation.“
  • Kira schrieb:

    Zitat von »Amin Negm-Awad«
    Mein Beitrag war ernst gemeint und kein Müll.

    Kira schrieb:

    Das du ihn ernst meintest nehm ich auch stark an, aber zumindest der Teil den du in Klammern geschrieben hast hat absolut NICHTS mit dem Thread zu tun und zielt lediglich darauf ab, andere dazu zu bringen darauf einzugehen und somit das ganze in's OffTopic zu zerren.

    Nein, der Klammerzusatz sollte ausdrücken, dass so ziemlich alles wichtiger ist. Ich bezweifele deine Gabe, Texte zu verstehen.

    Kira schrieb:

    Zitat von »Amin Negm-Awad«
    Was "sowas" ist, weiß ich nicht.

    Kira schrieb:

    Ich hoffe stark das du das nicht ernst meinst, sonst zweifle ich ernsthaft an deiner gabe Texte zu verstehen.
    Mit 'sowas' beziehe ich mich auf das Thema das Threads, genau auf das worauf du dich mit deinem "darüber" auch beziehst.

    Also Schleifen in der Mitte zu verlassen? Dann behaupte ich mal, dass noch kein Sourcetext deshalb unleserlich geworden ist. Das ist auch fernliegend.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • dergraf schrieb:

    Michael schrieb:

    Ich würde es mit einer dritten Variante machen:

    Quellcode

    1. rc = sasl_client_step( ... );
    2. while (rc == SASL_INTERACT) {
    3. [self doInteract];
    4. rc = sasl_client_step( ... );
    5. }

    Michael

    An die Möglichkeit habe ich bis jetzt noch gar nicht gedacht. Würde in dem Beispiel gehen, nur in anderen Fällen habe ich da mehrere Zeilen Code anstelle von einem einfachem Funktionsaufruf, die ich ganz bestimmt nicht zwei mal schreiben will. […]

    Sic!

    Du hast in diesem Thread schon ein Vielfaches von einer Zeile geschrieben.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Kira schrieb:

    Was für Seiteneffekte siehst/befürchtest du denn da?
    Die Zuweisung an rc ist in diesem Fall ein Seiteneffekt. Eine Abfrage soll etwas abfragen und nicht auch noch andere Dinge auf einmal verändern.

    Kira schrieb:

    Wenn du mehrere Codezeilen hast, ist da aber normalerweise trotzdem nur EINE da für eine if-bedingung. Oder wie würde bei dir eine derartige if-bedingung mit mehreren Codezeilen aussehen?

    macmoonshine schrieb:

    Wenn es nicht die erste Zeile ist, die den Wert für den Schleifenabbruch liefert, dann funktioniert dieser Ansatz ohne ausgelagerte Methode oder Funktion und ohne Code-Doppelung nicht mehr.
    Genau so habe ich das gemeint.
  • Amin Negm-Awad schrieb:

    Nein, der Klammerzusatz sollte ausdrücken, dass so ziemlich alles wichtiger ist. Ich bezweifele deine Gabe, Texte zu verstehen.

    Na ja, da du eine weile länger hier im Forum bist als ich und die Leute sicher noch besser kennst als ich, solltest du wissen das viele hier auf diesen Zug aufspringen (wie es ja auch passiert ist).
    Und wenn man eben weiß das es hier solche Leute gibt die gern so abschweifen (und zu denen gehörst du sicherlich auch), kann man schon unterstellen das du mit diesem Satz genau darauf abgezielt hast.

    Aber egal.. die diskussion darüber ist genauso sinnfrei und OffTopic wie die Basilikum-Diskussion

    Amin Negm-Awad schrieb:

    Also Schleifen in der Mitte zu verlassen? Dann behaupte ich mal, dass noch kein Sourcetext deshalb unleserlich geworden ist. Das ist auch fernliegend.

    Es macht aber durchaus einen unterscheid ob man 6 Zeilen Code oder nur 2 hat.
    Und ich wüsste nicht was verkehrt daran ist sich darüber gedanken zu machen einen guten Code-Stil zu haben.

    Wenn ich von Kollegen Code bekomme der 6 Zeilen Code an einer stelle hat wo nur 2 nötig wären finde ich das immer sehr irritierend, denn ich frag mich immer "Kann er es nicht besser, oder steckt da ein größerer Zweck dahinter den ich grad aufanhieb nicht sehe?".
  • Kira schrieb:

    […]
    Es macht aber durchaus einen unterscheid ob man 6 Zeilen Code oder nur 2 hat.
    Und ich wüsste nicht was verkehrt daran ist sich darüber gedanken zu machen einen guten Code-Stil zu haben.

    Wenn ich von Kollegen Code bekomme der 6 Zeilen Code an einer stelle hat wo nur 2 nötig wären finde ich das immer sehr irritierend, denn ich frag mich immer "Kann er es nicht besser, oder steckt da ein größerer Zweck dahinter den ich grad aufanhieb nicht sehe?".


    Stil sind andere Fragen als diese hier.

    Und die Anzahl der Zeilen ist ganz gewiss keine Stilfrage.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • macmoonshine schrieb:

    Amin Negm-Awad schrieb:

    Du hast in diesem Thread schon ein Vielfaches von einer Zeile geschrieben.

    Findest Du denn Code-Duplikate in Ordnung?

    Ich hätte das oben nicht so gemacht, weil es mutmaßlich nicht der Intention der Schleife entspricht. Aber wenn etwa einmal ein Parameter FIRST_CHECK und dann ein Parameter CONTINUE übergeben wird, würde ich es genau so machen wie Michael. Das ist keine Frage, ob man eine Schleife in der Mitte verlässt. Man verlässt sie dann in der Mitte, wenn es dem Problem entspricht.

    Daher empfinde ich den gesamten Thread als völlig wertlos.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?
  • Amin Negm-Awad schrieb:

    Stil sind andere Fragen als diese hier.

    Und die Anzahl der Zeilen ist ganz gewiss keine Stilfrage.

    Nein das gehört genauso zu Stil wie auch die Einrückung und co. Auf einem entfernteren level, aber durchaus noch als Stil zu bezeichnen.

    Sobald man in Gruppen Programmiert und Code von anderen bekommt oder eigenen weitergibt, muß man eben darauf achten das gewisse dinge sinnvoll geschrieben sind.

    Und da ist es ein riesen unterschied zwischen:

    Quellcode

    1. rc = doSomething();
    2. while (rc == 42) {
    3. blubb();
    4. rc = doSomething();
    5. }


    und

    Quellcode

    1. while (doSomething() == 42)
    2. blubb();


    jetzt in diesem fall natürlich kein allzu gravierender, aber das zweite ist definitiv schneller und leichter zu lesen.

    Und wenn jemand fragt ob man variante 2 noch geschickter schreiben kann, weiß ich nicht was daran so schlimm oder unwichtig ist.

    Ich kenne dein Buch nicht, hoffe aber das du dir da gedanken dazu machst wie du Code Beispiele machst, und nicht beim schreiben dauernd in gedanken beim Basilikum warst.
  • Ich kann es mir nicht verkneifen...

    C-Quellcode

    1. while(d()==42)b();


    C-Quellcode

    1. /* As long as doSomething succeeds,
    2. (return value is uint: 42)
    3. trigger the function to log
    4. everything in the ether */
    5. while( doSomething() == 42 )
    6. {
    7. // blubb() should be changed to a less senseless name...
    8. blubb();
    9. }


    Wat is nu kürzer und wat is für Andere leichter zu verstehen? :P

    Ich persönlich könnte ja die Leute verhauen, die ihre geschweiften Klammern wegoptimieren.

    macmoonshine schrieb:


    Wenn es nicht die erste Zeile ist, die den Wert für den Schleifenabbruch liefert, dann funktioniert dieser Ansatz ohne ausgelagerte Methode oder Funktion und ohne Code-Doppelung nicht mehr.

    Och, ich weiß nicht recht...

    C-Quellcode

    1. int maximum = 5;
    2. (void) myBlock = ^(int current){
    3. NSLog(@"I'm in a test cycle, you know?");
    4. NSLog(@"Currently I'm on run# %i", current);
    5. // Should I proceed?
    6. if(current == maximum)
    7. {
    8. return NO;
    9. }
    10. else
    11. {
    12. return YES;
    13. }
    14. };
    15. int run = 0;
    16. maximum = 42;
    17. while(myBlock(run) == YES)
    18. {
    19. NSLog(@"Strange, guess I'm stuck. Damned closures!");
    20. run++;
    21. }
    Alles anzeigen


    Wobei ich mir nicht ganz sicher bin, ob die die Blöcke nicht mit 'ohne ausgelagerte Funktion' bereits ausgeschlossen hast.
    Obwohl: nee, haste nicht. :P
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • Lucas de Vil schrieb:

    Wobei ich mir nicht ganz sicher bin, ob die die Blöcke nicht mit 'ohne ausgelagerte Funktion' bereits ausgeschlossen hast.

    Stimmt, an Blöcke hatte ich gar nicht gedacht. Da es mir aber um Kiras Aussage ging, dass nur eine Codezeile für die Abbruchbedingung zuständig ist, würde ich hier die Blöcke durch den Begriff Funktionen als mit abgedeckt betrachten.

    Oder anders ausgedrückt: Micheals Vorschlag funktioniert bei mehrzeiligem Code nur, wenn die erste Zeile die Abbruchbedingung berechnet oder sich der Code in eine Methode, Funktion, Block o. Ä. auslagern lässt. ;)
    „Meine Komplikation hatte eine Komplikation.“
  • macmoonshine schrieb:

    fwtag schrieb:

    Eigentlich zupft man doch Basilikum, weil das Schnibbeln den Basilikum bitter macht ...?

    Dann hat also jedes Basilikum-Pesto einen bitteren Geschmack?

    Ich kann mir das nur dadurch erkl;ären, das beim Zupfen, anders als beim Schneiden, die harten Blattteile unzerstört bleiben.
    Ich würde auf jeden Fall auch zupfen, und nicht in die Sauce, sondern vorm Servieren darauf.
    Wir müssen das wirklich nochmal vertiefen.

    Zum Thema: Eigentlich ist es mir schnurz, wie die Schleife aussieht. Wichtig ist, dass der ganze Vorgang ordentlich gekapselt ist.
    Das [self doInteract] würde mir die meisten Kopfschmerzen bereiten, aber daran denkt natürlich keiner.
    Und wir sind hier im Objective-C/Cocoa-Forun, nicht A,B,C oder C-+ Forum.
    I would be embarrassed if they did not spy on me.
  • Ja: Stil und Lesbarkeit sind wichtig. Und nein: Es gibt keine Schleifenschreibweise, die immer besser lesbar ist als andere.

    Senf 1: Ein brauchbarer Programmierer sollte alle der Beispiele hier ohne Anstrengung lesen können. Selbst sowas hier:

    Quellcode

    1. for (;42==checkCondition();doSomething());

    Senf 2: Nach meiner Erfahrung ist eine unlesbare Schleife in den allermeisten Fällen ein Zeichen dafür, dass anderswo (sprich: im Schleifenrumpf oder auf konzeptioneller Ebene) etwas im Argen ist. Kapseln, auslagern, anständig benennen, rinse, repeat.

    Und nun zur eigentlich wichtigen Frage: Frisches Basilikum danach drauf. Während des Kochens etwas Basilikumpesto oder -öl rein. Die beiden unterstützen sich wunderbar und frische Blätter sind ansehnlicher als vermatschtes Grünzeug.
    Multigrad - 360°-Produktfotografie für den Mac
  • longW schrieb:

    Ich kann mir das nur dadurch erkl;ären, das beim Zupfen, anders als beim Schneiden, die harten Blattteile unzerstört bleiben.

    Aber das Basilikum in einem Pesto ist ja nicht nur geschnitten sondern schon eher püriert. Tofu lässt sich übrigens mit einer selbstgefertigten Sauce aus geschnittenem Basilikum ganz delikat grillen und das schmeckt auch nicht bitter. Wenn ich die Blätter von der Pflanze abzupfe, ist da auch nichts Hartes mehr dran.
    „Meine Komplikation hatte eine Komplikation.“
  • Am Anfang meines Programmiererlebens habe ich auch noch auf die Feinheiten der Schleifenschreibweise geachtet. Mittlerweile ist mir das egal, und wenn ich doch mal länger darüber nachdenken muss dann trifft meistens Mattiks 2. Senf zu.

    Kleingehackte Stengel in Öl einlegen und das Öl dann ohne Stengel zum Anbraten etc.verwenden.
    Kleingeschnittene Blätter ohne Stengel am Ende des Kochvorgangs einige Minuten mitziehen lassen.
    Zerrupfte Blätter zur Deko drüber bröseln.
    Basilikum ist auch als Aphrodisiakum verschrien, also reichlich verwenden :)

    Chris
    Man macht einfach solange irgendwelche Dinge, bis man tot ist.
    Und dann bekommen die anderen Kuchen.
  • So, ich hab noch mal meine Ausgabe von "Code Complete" von Steve McConnell rausgesucht und nachgelesen. Der führt eine Studie an, nach der Endlosschleifen, die in der Mitte verlassen werden verständlicher sind als andere Schleifen-Typen, wenn es nötig ist am Ende die Schleife nur zur Hälfte zu durchlaufen. Im übrigen kann ich dieses Buch sowieso allen empfehlen, die meinen so etwas wären nur Kleinigkeiten und egal. Dort werden nicht nur Behauptungen aufgestellt, sie werden auch mit Studienergebnissen und Statistiken untermauert.

    Aber hier in diesem Forum scheint ja Basilikum einen höheren Stellenwert als guter Code einzunehmen...
  • dergraf schrieb:

    So, ich hab noch mal meine Ausgabe von "Code Complete" von Steve McConnell rausgesucht und nachgelesen. Der führt eine Studie an, nach der Endlosschleifen, die in der Mitte verlassen werden verständlicher sind als andere Schleifen-Typen, wenn es nötig ist am Ende die Schleife nur zur Hälfte zu durchlaufen.

    Interessant.
    Daraus ergeben sich mir zwei Fragen.
    1) WIESO zum Henker muss die Abbruchbedingung in der Mitte stehen?
    2) WAS passiert eigentlich, wenn ich die Schleife zu 80% durchlaufe? Oder nur zu 17%? Zählt da die Zeilenanzahl im Schleifenrumpf oder das Eintreten des Abbruchs nach der Hälfte der veranschlagten Zeit? Wie hoch ist eigentlich die Hälfte der veranschlagten Zeit bei einer Endlosschleife?

    Weiterhin ergibt sich mir eine Anforderung.
    1) Zeig mal die Studie, würde mich interessieren.
    (Auch, wer so besch... +hüstel+ wer die Muße aufbringt, in einer solch prekären Frage repräsentative Studien durchzuführen.)

    Oh, und ein blöder Kommentar fällt mir dazu auch noch ein.
    1) Interessant. Ich wette es dauert keine 10 Wochen um eine Studie zu bekommen, in der die doppelte Menge an Teilnehmern das Gegenteil behauptet. Es lebe die zensurfreie Medienindustrie. Es gibt auch Doktorarbeiten zum korrekten Zubereiten von Basilikum oder zum erfolgreichen Erschlagen von Fliegen. Was ändert das?

    dergraf schrieb:

    Im übrigen kann ich dieses Buch sowieso allen empfehlen, die meinen so etwas wären nur Kleinigkeiten und egal. Dort werden nicht nur Behauptungen aufgestellt, sie werden auch mit Studienergebnissen und Statistiken untermauert.

    Es tut mir leid, wenn dich meine Worte irgendwie verletzen sollten. Dennoch schreibe ich das hier ganz unverblümt:
    So empfehlenswert kann das besagte Buch nicht sein, wenn du als Verfechter eben dieses Buches es nicht einmal schaffst uns im Grundsatz die wichtigen Informationen mitzuteilen.
    if(MORE_DETAILED_INFORMATION_IS_NEEDED) goto wtf;

    dergraf schrieb:

    Aber hier in diesem Forum scheint ja Basilikum einen höheren Stellenwert als guter Code einzunehmen...

    Entschuldige bitte, kein einziger deiner Schnipsel war vernünftiger Code. Vernünftigen Code diesbezüglich hat, von der Klammerung einmal abgesehen, Kira geliefert.
    Wie du selbst uns mitgeteilt hast kommt erschwerend hinzu, dass sämtliche Aussagen ihre Gültigkeit in Abhängigkeit des Zweckes verlieren.

    label wtf:
    Was genau willst du eigentlich?

    mattik schrieb:


    Senf 1: Ein brauchbarer Programmierer sollte alle der Beispiele hier ohne Anstrengung lesen können. Selbst sowas hier:

    C-Quellcode

    1. for (;42==checkCondition();doSomething());

    Autsch. +schüttel+
    «Applejack» "Don't you use your fancy mathematics to muddle the issue!"

    Iä-86! Iä-64! Awavauatsh fthagn!

    kmr schrieb:

    Ach, Du bist auch so ein leichtgläubiger Zeitgenosse, der alles glaubt, was irgendwelche Typen vor sich hin brabbeln. :-P
  • fwtag schrieb:

    Amin Negm-Awad schrieb:

    Wie fein hackst Du Dein Basilikum denn?


    Wenn die Mengen nicht riesig sind, dann gar nicht. (Und bei großen Mengen auch mit dem Wiegemesser.)

    In jedem Falle recht grob.

    Eigentlich zupft man doch Basilikum, weil das Schnibbeln den Basilikum bitter macht ...?

    Deshalb hacke ich ihn nicht (= quetschen). Mit Schneiden habe ich keine Probleme.

    Aber wenn ich Pesto mache, landet er auch im Mörser. Und komischerweise macht ihn das nicht bitter. Ich glaube, dass da viel Voodoo bei ist.
    Es hat noch nie etwas gefunzt. To tear down the Wall would be a Werror!
    25.06.2016: [Swift] gehört zu meinen *Favorite Tags* auf SO. In welcher Bedeutung von "favorite"?