Welche Schleife soll ich wann benutzen?



  • @adii950 sagte in Welche Schleife soll ich wann benutzen?:

    @DocShoe Ja aber man muss doch sinnvoll die schleifen benutzen und nicht weil man zur 99% die for-schleife benutzen kann die benutzt verstehst du was ich meine? 😅🤔

    Ja, das ist so. while und for Schleifen erfüllen die gleiche Funktion, wobei die for-Schleife flexibler ist und den scope von benötigten Variablen reduzieren kann. Das ist aber Jammern auf hohem Niveau.



  • @DocShoe hmm okay danke dir 😆👍🏽



  • @DocShoe Achso okay verstehe danke dir 👍🏽😆



  • @DocShoe sagte in Welche Schleife soll ich wann benutzen?:

    Jo, stimmt. Wie gesagt, ich benutzte while() Schleifen so gut wie nie, da habe ich mir um so Optimierungen keine Gedanken gemacht.

    Es geht dabei ja um Lese-Optimierung. Die while-Schleife wie im Vorschlag von @DirkB ist besser lesbar als dasselbe in einer for-Schleife.

    Solche Einleseschleifen wie "solange wie du Daten korrekt einlesen kannst (und die Daten gültig sind), ..." würde ich eher als while-Loop machen. Wenn du das als for-Loop machst, hast du das Einlesen einmal bei der Initialisierung und einmal als 3. Argument des fors.

    Im Gegensatz zu dir versuche ich for-Schleifen mit 3 for-Argumenten zu vermeiden. Obigen Fall würde ich also mit while lösen. Wenn möglich, würde ich for nur in der Range-For-Form nutzen, also for (const auto var& : container) { ... }. Daher meine Daumenregel: je komplizierter die Abbruchbedingung, desto while 🙂



  • @wob

    Persönliche Präferenz, würde ich sagen. Ich habe mich an das Lesen von for-Schleifen gewöhnt.



  • Ich kann mir vorstellen, dass wir in Zukunft auch mehr sowas hier sehen werden:

    for (auto i : integer_range(0, 10))
    
    for (auto data : data_reader(data_source))
    

    ... damit kann ich mich durchaus anfreunden, da man so read_data und data_valid elegant in einem Iterator verpacken kann und den Anwender nicht mit diesen Details belästigt. Schliesslich ist der aller Wahrscheinlichkeit nach nur daran interessiert, die Dateneinträge zu durchlaufen und muss vielleicht nicht unbedingt wissen, wie man diese liest, konkret abschreitet oder wie sie terminiert sind.

    Dennoch: Als Anfänger natürlich erstmal intim mit do/while/for und Range-for für Standardcontainer vertraut werden. Die oben gennanten Beispiele sind für Fortgeschrittene - zumindest wenn man sowas selbst implementieren will.



  • Ist jetzt vielleicht nicht im engeren Sinne eine "Schleife", aber es gibt auch noch die Möglichkeit mit 'goto' zu arbeiten. Die Lösung bietet sich an, wenn du ganz wilde Konstrukte hast (z.B. mehrere optionale "Absprung-Punkte" und mehrere unterschiedliche "Einsprung-Punkte").

    🤪



  • @meiru wenn du regelmaessig mit goto rumwurschteln musst, um halbwegs durch deinen code zu kommen, hast du ein groesseres problem als die entscheidung zwischen for und (do) while



  • @meiru vielen Dank, aber wir dürfen an der Uni kein 'goto' benutzen 😅



  • @Cardiac ich spiele nicht mit 'goto' herum wir dürfen es nicht benutzen 😅


Log in to reply