sinnlos-Schleife vs goto?



  • Hi,

    was ist weniger schlimm? Gibts für sowas vielleicht noch eine bessere Lösung?
    (Außer einer eigenen Funktion und statt goto halt return :D)

    Edit: Nach Anmerkung keine Zuweisungen mehr in if Abfrage 😉

    asd = asdf()
    if (!asd)
      goto NEXT;
    
    fasds = sadfa()
    if (!fasds)
      goto NEXT;
    ..
    NEXT:
    ..
    
    while (1)
    {
      asd = asdf()
      if (!asd)
        break;
    
      fasds = sadfa()
      if (!fasds)
        break;
      ..
    }
    ..
    


  • switch ... desweiteren sind Zuweisungen in if-Abfragen schlechter Stil.



  • Also.. ich glaube ich stehe da gerade zieeeemlich auf dem Schlauch.. wie meinst Du das genau mit dem switch? So?

    switch (aa)
    {
      asd = asdf()
      if (!asd)
        break;
    
      fasds = sadfa()
      if (!fasds)
        break;
      ..
    }
    


  • Du machst mich wahnsinnig mit deinen Namen ( asd, asdf, fasds, sadfa - schwieriger zum Lesen kann man so wenig Code wohl kaum machen!). Wie wäre es mit folgendem Konstrukt:

    if (!(a() || b() || c())
        break;
    


  • printf("1 oder 2?");
    scanf("%d", &aa);
    
    switch (aa)
    {
      1:
        asd = asdf()
        if (!asd)
          break;
    
      2:
        fasds = sadfa()
        if (!fasds)
          break;
      ..
    }
    


  • cooky451 schrieb:

    was ist weniger schlimm? Gibts für sowas vielleicht noch eine bessere Lösung?
    (Außer einer eigenen Funktion und statt goto halt return :D)

    ich nehme an du meinst do {} while(0) statt die Endlosschleife. Dann wäre auf jeden Fall das goto weniger schlimm.



  • /rant/ schrieb:

    Wie wäre es mit folgendem Konstrukt:

    if (!(a() || b() || c())
        break;
    

    das ist aber nicht das gleiche.

    ender schrieb:

    printf("1 oder 2?");
    

    und das hat überhaupt nichts mehr mit dem Originalcode zu tun.



  • asd = asdf()
    if (asd)
    {
        fasds = sadfa()
        if (fasds)
        {
            ...
        }
    }
    


  • @/rant/ Sorry wegen den Namen 😉

    Mit dieser Variante müsste ich aber
    1. Die Zuweisungen wieder IN der if Abfrage machen
    2. Falls eine Funktion nur "funktionieren" muss und der Rückgabewert nicht gespeichert werden muss/soll ist keine (bzw. keine detaillierte) Fehlermeldung mehr möglich.

    @ender
    Ehm.. naja.. wie gesagt hat nichts bzw. sehr wenig mit der Frage zu tun 😃

    @wxSkip
    Naja gut, aber ist das wirklich schöner als goto? 😃 (Edit: Anmerkung: Das sollen dann min. 4 solcher Funktionen hintereinander sein.)



  • cooky451 schrieb:

    @wxSkip
    Naja gut, aber ist das wirklich schöner als goto? 😃

    Wie viele Abfragen willst du machen?
    Du könntest sonst auch den Code vor NEXT in eine Funktion kapseln, in der dann von den entsprechenden Stellen returned wird.



  • cooky451 schrieb:

    Hi,

    was ist weniger schlimm? Gibts für sowas vielleicht noch eine bessere Lösung?

    Wenn es eine Endlosschleife sein soll, hat sich die leere for Schleife eingebürgert. Es ist deutlich übersichtlicher Zuweisungen und ifs zu trennen.

    for(;;) {
        asd   = asdf();
        fasds = sadfa();
    
        if (!asd) {
            break;
        } else if (!fasds) {
            break;
        }
    }
    ..
    


  • Ich würde hier die Kapselung in einer Funktion und die Verwendung von return bevorzugen. Was ihr mit "switch" oder Endlosschleifen machen wollt ist mir schleierhaft.

    Der Thread heißt zwar "Schleife" aber ich sehe im Code vom TE keine Schleife...



  • It0101 schrieb:

    Der Thread heißt zwar "Schleife" aber ich sehe im Code vom TE keine Schleife...

    Im ersten Beispiel nicht, im zweiten schon
    Er sollte sich entscheiden, was er denn will.
    Eine Funktion ist nur dann sinnvoll, wenn der ganze Block hinreichend groß wird.



  • cooky451 schrieb:

    @ender
    Ehm.. naja.. wie gesagt hat nichts bzw. sehr wenig mit der Frage zu tun 😃

    @cooky451, das sollte einfach nur das switch sein, welches knivil angesprochen hatte.
    Welche Kriterien sollen denn beachtet werden? Solle es wie ~john meint eine Endlosschleife werden? Gib uns input 😕



  • ~john schrieb:

    It0101 schrieb:

    Der Thread heißt zwar "Schleife" aber ich sehe im Code vom TE keine Schleife...

    Im ersten Beispiel nicht, im zweiten schon
    Er sollte sich entscheiden, was er denn will.
    Eine Funktion ist nur dann sinnvoll, wenn der ganze Block hinreichend groß wird.

    Aso jetzt sehe ich das erst 😃 Naja es ist noch früh am Morgen 😉

    Also Endlosschleifen sind bei mir auch immer while-Schleifen.
    Nimmt sich ja zur for-Schleife wirklich nix.

    Das erste Beispiel mit goto ist Mist.



  • It0101 schrieb:

    Der Thread heißt zwar "Schleife" aber ich sehe im Code vom TE keine Schleife...

    Ihr wisst doch garnicht was der TE überhaupt will.
    Bisher ist die schleife und das goto doch misst.
    Vermutlich könntet ihr ihm, für das was er will, eine einfache, richtige UND saubere lösung Zeigen.



  • Ich denke, das ist ein sinnlos, denn ein goto kann je nach Kotext eine ganz gute Lösung darstellen. Aber wir kennen eben den Kontext des TEs nicht und deshalb ist es nicht möglich eine richtige Aussage zu treffen.

    Einfach zu sagen: "goto ist immer Mist" halte ich für dumm genauso wie "goto ist immer gut". Vielleicht wird der TE konkreter und erklärt uns, was er überhaupt vorhat.



  • knivil schrieb:

    switch ... desweiteren sind Zuweisungen in if-Abfragen schlechter Stil.

    Schwachsinn, kommt immer auf den Kontext an.



  • Um hier noch mal "input" zu geben.. 😉

    Es soll nicht um eine Endlosschleife gehen. Das Beispiel sollte gewissermaßen die zwanghafte Vermeidung von goto´s durch andere Konstrukte klar machen; zugegeben - da wäre sowas

    do
    {
      ..
    } while (0)
    

    besser gewesen.

    @ender
    Warum sind in dem switch denn Sprungmarken? Verstehe ich nicht so ganz..

    Insgesamt macht es doch wenig Unterschied ob oben "switch" oder "while" oder "do" usw. steht.
    Momentan muss ich sagen scheint eine extra Funktion (abgesehen von goto) hier wirklich am sinnvollsten zu sein, aber vielleicht kommt ja noch was 😃

    Edit:
    Um den Thread dann auch gleich so richtig schön lang zu machen könnte man auch gleich noch eine Umfrage starten.
    Sind Zuweisungen in Abfragen schlechter Stil? 😃



  • Wir wissen noch immer nicht, was du eigentlich machen möchtest. Diese Frage scheinst du vehement zu ignorieren.


Anmelden zum Antworten