switch-case Problematik



  • volkard schrieb:

    pointercrash() schrieb:

    Eine ganz andere Sache: Kann das sein, daß im Switch- Block break und continue ungleich behandelt werden? break beendet switch, soweit klar, aber continue bezieht sich nur auf eine umgebende Schleife, nicht auf den switch- Block? Wär' ja irgendwie inkonsistent ...

    Da continue für switch gar keine Bedeutung hat, ist es doch genau so logisch.

    Du verwechselst Definition mit Logik und behauptest, weil es so definiert ist, ist es auch logisch. Das ist sophistische Selbstreferenz, aber kein Argument.

    Wer von anderen Sprachen ausgeht, wird nämlich auch erstmal das break unlogisch finden und des öfteren wohl auch mal vergessen ;). Könnte sich continue auf switch beziehen, würde der switch- Block einfach nochmal durchlaufen, was so nebenzu zu einer multikonditionalen Schleife führen würde.
    Oder andersrum gefragt, worin liegt die Logik do/while/for mit beidem (break / continue) auszustatten, aber switch nicht?



  • Was sollte continue bei switch denn tun?



  • pointercrash() schrieb:

    Wer von anderen Sprachen ausgeht, wird nämlich auch erstmal das break unlogisch finden und des öfteren wohl auch mal vergessen ;).

    Dann macht er eben was falsch. Insbesondere hält er C für eine Sprache wie Java oder Basic.
    Das ist keine gute Sichtweise. C soll man sehen als recht angenehmen Makroassembler, und dann begreift man die Sprachmittel auch.

    Du verwechselst Definition mit Logik und behauptest, weil es so definiert ist, ist es auch logisch. Das ist sophistische Selbstreferenz, aber kein Argument.

    Nö, ich bezog mich darauf, daß continue bei switch keinen Sinn ergibt. Und wegen Sinnlosigkeit der einen Alternative ist die andere die logische.



  • volkard schrieb:

    Nö, ich bezog mich darauf, daß continue bei switch keinen Sinn ergibt. Und wegen Sinnlosigkeit der einen Alternative ist die andere die logische.

    Ist ja nicht sinnlos, wenn mit continue einfach zur Auswertung des switch- Arguments zurückgesprungen würde. Das wäre völlig analog zur Behandlung von continue in Schleifen.
    Im Gegenteil, es nicht so zu machen, bedeutet den größeren logischen Bruch.



  • pointercrash() schrieb:

    volkard schrieb:

    Nö, ich bezog mich darauf, daß continue bei switch keinen Sinn ergibt. Und wegen Sinnlosigkeit der einen Alternative ist die andere die logische.

    Ist ja nicht sinnlos, wenn mit continue einfach zur Auswertung des switch- Arguments zurückgesprungen würde. Das wäre völlig analog zur Behandlung von continue in Schleifen.
    Im Gegenteil, es nicht so zu machen, bedeutet den größeren logischen Bruch.

    Dann wäre switch ja nicht mehr eine Sprungtabelle, sondern eine Schleife.
    Tut mir leid, deiner Logik folge ich nicht.
    Man hätte statt "break" sich ein anderes Schlüsselwort einfallen lassen können, vielleicht "endcase", aber das ist eine andere Geschichte.



  • volkard schrieb:

    Dann wäre switch ja nicht mehr eine Sprungtabelle, sondern eine Schleife.

    Und das wäre entsetzlich?

    volkard schrieb:

    Tut mir leid, deiner Logik folge ich nicht.

    Das ist nicht "meine Logik", sondern die allgemeine Logik, Analogien bei Programmiersprachen weitestmöglich beizubehalten. Wenn wir ein switch mitm while außenrum haben, bricht man mit einem continue beide Strukturen, mit einem break nur das innere switch. Andererseits braucht man zwei breaks, um die Schleife endgültig abzubrechen. Das soll logisch sein?

    volkard schrieb:

    Man hätte statt "break" sich ein anderes Schlüsselwort einfallen lassen können, vielleicht "endcase", aber das ist eine andere Geschichte.

    Wenn ich keine Analogien provozieren mag, die nicht gegeben sind, wäre ein anderes Keyword ein Muß gewesen. Logischer wäre, dem switch sein continue zu geben. 😃



  • Ich bin dankbar, daß Du keine "logische" Sprache entwirfst.



  • pointercrash() schrieb:

    Ist ja nicht sinnlos, wenn mit continue einfach zur Auswertung des switch- Arguments zurückgesprungen würde. Das wäre völlig analog zur Behandlung von continue in Schleifen.
    Im Gegenteil, es nicht so zu machen, bedeutet den größeren logischen Bruch.

    continue ist für Schleifenkonstukte definiert, switch ist keines, daher sollte continue keine Auswirkungen auf switches ohne umrahmende Schleifen haben, also NoOp.
    Philosophieren darüber ist aber sicher erlaubt 🙂



  • Ich stelle mir das schon vor:

    switch (x)
    {
     case 1:
      break; // Beendet Case-Zweig
      break; // Verlässt Switch-Schleife
    
     case 2:
      continue; // Beginnt von vorne (Start der Switch-Schleife)
      break; // Beendet Case-Zweig
    
     default:
      break; // Beendet Case-Zweig
      break; // Verlässt Switch-Schleife
    }
    

    🤡



  • volkard schrieb:

    Ich bin dankbar, daß Du keine "logische" Sprache entwirfst.

    Es ist zum Kotzen mit Dir, immer bei Mangel an Argumenten wirst Du persönlich.

    Wutz schrieb:

    continue ist für Schleifenkonstukte definiert, switch ist keines, daher sollte continue keine Auswirkungen auf switches ohne umrahmende Schleifen haben, also NoOp.
    Philosophieren darüber ist aber sicher erlaubt 🙂

    Genau so hatte ich es gemeint! 😉



  • pointercrash() schrieb:

    Es ist zum Kotzen mit Dir, immer bei Mangel an Argumenten wirst Du persönlich.

    er hat doch vollkommen recht. "continue" hat als einzige semantik "fahre mit dem nächsten schleifendurchgang fort". keine andere. switch ist keine schleife. end of story. das ist bereits logisch, so wie es ist, und continue mit einer bedeutung für nicht-schleifen zu überladen wäre sicherlich nicht logik-förderlich. da kann man schon eher drüber diskutieren, ob eben jene überladung für "break" logisch ist.

    ru,
    cirion



  • Finde diese Diskusion absulut sinnlos, und kann mich nur volkard anschließen, "Ich bin dankbar, daß Du keine "logische" Sprache entwirfst.".



  • cirion schrieb:

    er hat doch vollkommen recht. "continue" hat als einzige semantik "fahre mit dem nächsten schleifendurchgang fort". keine andere.

    Falsch. Das ist eine Interpretation, die semantisch nach menschlichem Gebrauch sowieso nur unsinnig ist, weil "continue" "mach weiter so" bedeutet.

    cirion schrieb:

    switch ist keine schleife. end of story. das ist bereits logisch

    Nö, wenn man volkards Lesart von C als Assemblermakrosammlung deutet, eben nicht.

    cirion schrieb:

    , so wie es ist, und continue mit einer bedeutung für nicht-schleifen zu überladen wäre sicherlich nicht logik-förderlich.

    Nö, wenn man continue als "fang bei dem umschließenden Block neu an" interpretiert, eben nicht.

    cirion schrieb:

    da kann man schon eher drüber diskutieren, ob eben jene überladung für "break" logisch ist.

    Hatte ich vorher schon geschrieben ...



  • kopfschüttel schrieb:

    Finde diese Diskusion absulut sinnlos, und kann mich nur volkard anschließen, "Ich bin dankbar, daß Du keine "logische" Sprache entwirfst.".

    Dann schüttel mal den Kopf wie versprochen ... argumentfreies Gesabbel mußt Du als unreg nicht posten.



  • Es ist schon korrekt, dass continue nicht für switch gilt. Das wäre schon aus sprachlicher Sicht vollkommen irreführend:

    case 1000:
    // ...
    continue; // Er geht also ins nächste case (2000). Unlogisch + sinnlos!
    
    case 2000:
    // ...
    break; // Er bricht aus der Verzweigung heraus. Logisch + sinnvoll.
    

    Bei einer Schleife ist der Sinn jedoch nachvollziehbar. Die Schleife wird am Anfang fortgesetzt (contiue) bzw. abgebrochen (break).



  • pointercrash() schrieb:

    Falsch. Das ist eine Interpretation, die semantisch nach menschlichem Gebrauch sowieso nur unsinnig ist, weil "continue" "mach weiter so" bedeutet.

    aha. du gehst also nach der semantik der englischen sprache? dann erklär mir mal anhanddessen, was eine "for"-schleife ist. die semantik einer computersprache ist halt schon was anderes. obs nun "continue" oder "brtzlkt" heisst, ist wursch - die semantik dessen ist nunmal "mach mit der schleife weiter".

    Nö, wenn man continue als "fang bei dem umschließenden Block neu an" interpretiert, eben nicht.

    mit dieser semantik würde

    {
        // irgendwas
        continue;
    }
    

    zur schleife mutieren. ganz abgesehen davon, dass dann auch if-konstrukte "verschleifbar" wären (letztlich ist switch semantisch nur convenience-ersatz für if-else-kaskaden). keine gute idee - die lesbarkeit wäre dann völlig dahin. es macht schon sinn, dass jede form von schleife als solche bereits an ihrem kopf erkennbar ist.

    ru,
    cirion



  • Lesen -> Denken -> Posten

    Ich wollte ja nicht continue als Blödmannimplementation angedacht wissen, sondern als reentry in den Blockheader. Das führt wie bei Schleifen in den Entscheidungsteil (naja, bei do halt nicht).



  • pointercrash() schrieb:

    sondern als reentry in den Blockheader. Das führt wie bei Schleifen in den Entscheidungsteil (naja, bei do halt nicht).

    das macht das erst zur schleife, und damit die schleife nicht mehr am kopf erkennbar. wenn du drauf stehst, bastel dir nen kleinen präprozessor dafür - aber die meisten programmierer würden aus gutem grund einen großen bogen um sowas machen.

    ru,
    cirion



  • cirion schrieb:

    es macht schon sinn, dass jede form von schleife als solche bereits an ihrem kopf erkennbar ist.

    Ich lach' mich schief, da sind tatsächlich "fighters for the truth" einer Sprache, die einen jährlichen Wettbewerb im "most obfuscative code" (höchst erfolgreich) abhalten und die's nicht anders andenken wollen, weil's schon immer so war?

    Nee, ich dachte, 'ne Frage wär's wert, warum continue ausgerechnet für switch nicht gelten sollte, aber deswegen Anfeindungen zu kassieren, naja, was kommt nach dem großteils nicht implementierten C99? 😃



  • du stellst eine frage, die mit sprachdesign zu tun hat, und kommst dann mit argumenten, die höchstens mit sprachmissbrauch zu tun haben. was erwartest du? die antwort aus sicht des scriptkiddies, das so eine fixe idee toll findet, weil man plötzlich schleifen auch noch "obfuscaten" kann, oder eine antwort aus sicht eines informatikers, der sich mit sprachdesign ein wenig auskennt? letzteres wohl eher nicht...

    ru,
    cirion


Anmelden zum Antworten