Ist goto noch evil...



  • EOP schrieb:

    Am Ende wird alles immer zu einem goto.

    jne label, jmp label,...
    

    Seufz.

    Darum geht's aber überhaupt nicht.

    goto ist bei Hochsprachen böse, weil es zu Spaghetticode führt und die Struktur des Hochsprachencodes damit völlig zerrissen wird.



  • abc.w schrieb:

    berniebutt schrieb:

    ...
    hell:
    ...
    goto nirwana;
    ...
    nirwana:
    ... goto hell;
    ...
    

    Na, das ist ja trivial... es gibt z.B. so was:

    /* Hier macht jemand viele Sachen und bei Fehler springt er ans Ende der Funktion */
    if (err)
        goto label_a;
    ...
    if (err)
        goto label_b;
    ...
    if (err)
        goto label_c;
    ...
    if (err)
        goto label_d;
    ...
    if (err)
        goto label_e;
    ...
    /* keine Fehler, einfach return 0 */
        return 0;
    /* und das ist eine Art "Destruktor" am Ende der Funktion: */
    label_e:
        ...
    label_d:
        ...
    label_b:   /* Warum label_b vor label_c... */
        ...
    label_c:
        ...
    label_a:
        ...
        return err;
    

    warum kommt label_b vor label_c... 😕 🙂

    So ein Mist Code.

    Das ist viel sauberer:

    if (err)
    {
        mach a;
    }
    else
    {
      if (err)
      {
        mach b;
      }
      else
      {
        if (err)
        {
          mach c;
        }
        else
        {
          if (err)
          {
            mach d;
          }
          else
          {
            if (err)
            { 
               mach e;
            }
          }
        }
      }
    }
    

    Denn wenn man was reinprimmeln muß, dann zerhaut man sich nicht alles.



  • if (err)
    {
        mach a;
    }
    else
    {
      if (err)
      {
        mach b;
      }
      else
      {
        if (err)
        {
          mach c;
        }
        else
        {
          if (err)
          {
            mach d;
          }
          else
          {
            if (err)
            {
               mach e;
            }
          }
        }
      }
    }
    

    Der Code sieht aber rein optisch auch nicht besser aus... und was nicht gut aussieht, ist es meistens auch nicht 😃



  • !rr!rr__ schrieb:

    das ist eben der Unterschied zwischen Theorie und Praxis.

    Das Gebiet heißt ja nicht umsonst "BerechenbarkeitsTheorie".

    Ja, Einschätzungen über praktische Anforderungen haben ja glücklicherweise in der jüngsten Vergangenheit noch nie daneben gelegen. Warum sollte man also so etwas einfach realisierbares wie Turing-Vollständigkeit von einer Programmiersprache fordern, wenn es doch komplett unsinnig ist? 🙄



  • das hat was mit Beschreibungskomplexität zu tun:

    jede existierende Bandmaschine im Universum (Bandspeicher < oo !) läßt sich durch eine reguläre Sprache formalisieren. Diese Beschreibung wird aber i.a. lang und kompliziert sein.

    Mit einer Turing-vollständigen Sprache geht das oft viel kürzer und einfacher, und diese Effizienz in der Beschreibung überträgt sich auch auf allgemeine Probleme.



  • !rr!rr_. schrieb:

    Schleifen sind sehr wohl durch Intervall und Iterator ersetzbar. Alle in der Praxis auftretenden Schleifen werden höchstens 1e1000-mal durchlaufen, also reichen endliche Intervalle vollkommen aus.

    Bleibt noch die Endlosschleife - die tritt in der Praxis nicht auf, weil kein Programm unendlich lange läuft.

    In der Praxis treten aber auch Zahlenwerte in der Größenordnung 1e1000 nie in einer Form auf, mit der man praxisnahe über in Intervall iterieren kann.



  • So coded mann schrieb:

    ...
    So ein Mist Code.
    Das ist viel sauberer:

    ...
    

    Nein, es müsste dann so sein:

    if (err)
    {
        mach a;
    }
    else
    {
        if (err)
        {
            mach b;
            mach c;
            mach a;
        }
        else
        {
            if (err)
            {
                mach c;
                mach a;
            }
            else
            {
                if (err)
                {
                    mach d;
                    mach b;
                    mach c;
                    mach a;
                }
                else
                {
                    if (err)
                    { 
                        mach e;
                        mach d;
                        mach b;
                        mach c;
                        mach a;
                    }
                }
            }
        }
    }
    

    Ich finde so was auch nicht gut...



  • Leute, da hat jemand simpel danach gefragt, ob goto heute als evil gilt oder vielleicht doch noch seine Berechtigung finden kann! 🙂 7 Seiten Diskussion um was? 😕 Morgen fragt jemand, was er nehmen soll:

    i = i + 1;
    i++;
    ++i;
    

    Wieviele Seite gibt es dafür?



  • Gib doch einfach eine simple Antwort, dann sparst Du vielleicht 7 weitere Seiten 😉 .



  • Ist goto noch evil oder darf man es wieder verwenden?

    Ja!



  • Walli schrieb:

    Gib doch einfach eine simple Antwort, dann sparst Du vielleicht 7 weitere Seiten 😉 .

    Einverstanden! goto ist eine sehr einfache Kontrollstruktur zum Ablauf eines Programmes und kann schrecklichen Spaghetticode erzeugen. In 99,99% gibt es besseres! 😮 Also möglichst vermeiden oder nur in besonderen Fällen einsetzen, wenn nichts passendes einfallen will.



  • Ist goto noch evil oder darf man es wieder verwenden?

    Ja!

    A oder B mit "Ja" zu beantworten ist super:

    Willst du Wasser oder Limonade ?
    Kuchen.



  • Tim06TR schrieb:

    A oder B mit "Ja" zu beantworten ist super:

    Ich habe genau das ausgedrückt, was ich ausdrücken wollte. 😉


Anmelden zum Antworten