While vs for



  • Hallo,

    ich stelle hier mal eine vage Behauptung auf. Meiner Meinung nach ist die while Schleife mehr ein Übel als eine Hilfe. Gerade Anfänger werden dadurch verwirrt.
    (Wann soll ich das eine oder das andere verwenden, Da gibt es ja dann auch noch do .. while, etc. alles sehr verwirrend)

    Denn statt

    while (x<10)
    

    kann man immer

    for(;x<10;)
    

    schreiben.



  • blurry333 schrieb:

    [...] Wann soll ich das eine oder das andere verwenden, [...]

    Gaaaaanz einfach: Nimm einen Hammer, wenn du einen Hammer brauchst, eine Zange, wenn du eine Zahnge brauchst und einen Schraubenzieher, wenn du einen Schraubenzieher brauchst. 👍



  • Jaa aber warum 2 kopfgesteuerte Schleifen wenn es auch eine tut 🙂



  • blurry333 schrieb:

    Jaa aber warum 2 kopfgesteuerte Schleifen wenn es auch eine tut 🙂

    Ja, mit einer** for -Schleife kannst Du eine while -Schleife emulieren, indem Du den Initialisierungsteil und den Anweisungsteil der for **-Anweisung leer lässt.

    Vermutlich hat man das** while Schlüsselwort eingeführt, weil der Fall mit leerem Initialisierung- und Anweisungsteil in der Praxis eben sehr häufig vor kommt und die Verwendung von for **in diesem Fall wenig intuitiv ist. In diesem Sinne handelt es sich um "Syntactic Sugar".

    Da könntest Du auch fragen wieso ich "x += 1" anstatt "x = x + 1" schreiben darf, wenn doch beides auf's selbe heraus kommt. Ersteres ist eben eine Kurzschreibweise, die man benutzten kann, aber nicht muss.

    Außerdem: Mit** while kannst Du auch eine do...while -Schleife erzeugen. Und das kannst Du nicht mit for **emulieren...



  • Weil man manchmal einen Hammer braucht, manchmal einen Schraubenzieher. Aber hey, warum überhaupt Schleifen!? if und goto tuns auch. Meiner Meinung nach ist die while Schleife sind Schleifen mehr ein Übel als eine Hilfe. Gerade Anfänger werden dadurch verwirrt.



  • Im Jahr 2015 schon mal was von Strukturierter Programmierung gehört? 😉

    Ja, man könnte anstatt** for und while auch mit komplett mit goto **arbeiten, so wie wir das mal Anno 1982 mangels Alternative auf dem guten alten C64 gemacht haben. Man könnte auch gleich alles in Assembler schreiben, anstatt eine Hochsprache wie C oder C++ zu verwenden. Oder man könnte gleich Binärcode im Hex-Editor basteln (Lochkarten-Leser sind ja leider dieser Tage schwer zu beschaffen)- Aber macht das, von sehr speziellen Ausnahmen, heute noch Sinn? Führt es zu verständlichem und gut wartbarem Code? Wohl eher nicht!

    Von daher sollte man Anfänger direkt an die Strukturierter Programmierung heranführen und "Unarten" wie** goto von Anfang an unterbinden. Wenn Profis, die genau wissen was sie tun, hin und wieder zu goto **greifen, ist das natürlich okay.



  • Im Jahr 2015 schon mal was von Strukturierter Programmierung gehört? 😉

    Ja, man könnte anstatt** for und while auch komplett mit goto **arbeiten, so wie wir das mal Anno 1982 mangels Alternative auf dem guten alten C64 gemacht haben. Man könnte auch gleich alles in Assembler schreiben, anstatt eine Hochsprache wie C oder C++ zu verwenden. Oder man könnte auch gleich Binärcode im Hex-Editor basteln. Lochkarten-Leser sind ja leider dieser Tage schwer zu beschaffen :p

    Aber macht das alles, von sehr speziellen Ausnahmen abgesehen, heute noch Sinn? Führt es zu verständlichem und gut wartbarem Code? Wohl eher nicht!

    Von daher sollte man Anfänger direkt an die Strukturierter Programmierung heranführen und "Unarten" wie** goto von Anfang an unterbinden. Wenn Profis, die genau wissen was sie tun, hin und wieder zu goto **greifen, ist das natürlich okay.



  • Für wen ist das denn wirklich verwirrend? Butter bei die Fische oder Klappe halten.



  • Bashar schrieb:

    Für wen ist das denn wirklich verwirrend?

    Mindestens für blurry :p

    DeathcubeUK schrieb:

    Man könnte auch gleich alles in Assembler schreiben, anstatt eine Hochsprache wie C oder C++ zu verwenden. Oder man könnte auch gleich Binärcode im Hex-Editor basteln. [...]

    Natürlich sollte man das! Dadurch ist man klarerweise viel näher an der Maschine! Wenn schon Hochsprache, dann sollte man zu modernen Varianten wie D oder Rust greifen und um das alte überholte C* Zeugs einen weiten Bogen machen.



  • blurry333 schrieb:

    Meiner Meinung nach ist die while Schleife mehr ein Übel als eine Hilfe.

    Ist mit der Programmierung wie im wirklichen Leben. Da sind manche Leute auch mehr ein Übel als eine Hilfe.



  • 😃



  • DeathcubeUK schrieb:

    Im Jahr 2015 schon mal was von Strukturierter Programmierung gehört? 😉

    Die ist seit August 2002 als veraltet zu betrachten und sollte nicht mehr gelehrt werden.

    Tatsächlich ist sie im C++-Umfeld zum Teil hinderlich und führt zu pascaloidem Gekröse.



  • blurry333 schrieb:

    ich stelle hier mal eine vage Behauptung auf. Meiner Meinung nach ist die while Schleife mehr ein Übel als eine Hilfe. Gerade Anfänger werden dadurch verwirrt.

    Warum? C und C++ wurden nicht für Programmierer entworfen, die nicht in der Lage sind, sich ordentliche Lehrbücher zu kaufen oder diese zu verstehen. Wer darauf keinen Bock hat, muss halt Java lernen oder das Programmieren anderen überlassen.



  • volkard schrieb:

    Tatsächlich ist sie im C++-Umfeld zum Teil hinderlich und führt zu pascaloidem Gekröse.

    Volkard!? Jetzt sei doch mal ehrlich!? Das Committee hätte mit C++11/C11 endlich die Möglichkeit gehabt, solch desaströs veraltete und künstliche Konstrukte wie Schleifen endlich aus der Sprache zu verbannen! Aber nein, was machen sie? Sie führen ein noch grausigeres for-each konstrukt ein??



  • Swordfish schrieb:

    volkard schrieb:

    Tatsächlich ist sie im C++-Umfeld zum Teil hinderlich und führt zu pascaloidem Gekröse.

    Volkard!? Jetzt sei doch mal ehrlich!? Das Committee hätte mit C++11/C11 endlich die Möglichkeit gehabt, solch desaströs veraltete und künstliche Konstrukte wie Schleifen endlich aus der Sprache zu verbannen! Aber nein, was machen sie? Sie führen ein noch grausigeres for-each konstrukt ein??

    Schleifen sind gut. Andere Sachen der Strukturierten Programmierung sind müllig.

    http://en.wikipedia.org/wiki/Structured_programming#Early_exit
    Early Exits sind aber heute streng zu bevorzugen.

    http://en.wikipedia.org/wiki/Structured_programming#Exception_handling
    *lach*
    Die hatten was im Tee.



  • Ja, eben. Das ganze gedöhns hätt man sich mit vernünftig platzierten goto s sparen können ... genauso wie diese sinnfreien Schleifen 💡

    //edit: Noch dazu könnt' man sich mit goto die blöde Fragerei sparen, ob da alle Typen RAII sind oder nicht ...

    volkard schrieb:

    Die hatten was im Tee.

    *eeeek* was meinst Du damit? Will auch?! ... aber ich mag keinen Tee 🙄



  • int i = 10;
    
    	do 
    	{
    	} while ( --i );
    

    ->

    int i = 10;
    
    start:
    	if( --i )
    		goto start;
    


  • Nein, ich sehe hier kein Problem. For nutzt man, wenn Du inetwa sagen kannst für jedes, while nutzt Du bei solange oder während.

    Für Klingonen ist das vielleicht verwirrend.

    Mfg Martin



  • DeathcubeUK schrieb:

    blurry333 schrieb:

    Jaa aber warum 2 kopfgesteuerte Schleifen wenn es auch eine tut 🙂

    Ja, mit einer** for -Schleife kannst Du eine while -Schleife emulieren, indem Du den Initialisierungsteil und den Anweisungsteil der for **-Anweisung leer lässt.

    ...

    Außerdem: Mit** while kannst Du auch eine do...while -Schleife erzeugen. Und das kannst Du nicht mit for **emulieren...

    Das ist ein Widerspruch. Wenn Du mit for auch while kannst und Du mit while auch do-while kannst, dann kannst Du mit for auch do-while.

    Mfg Martin



  • ich kann mit for auch do ... while !?


Anmelden zum Antworten