[Umfrage] - Sprunganweisung falscher / alter Programmierstil?

  • Exit falscher / alter Programmierstil? 3

    1. Ja, alt (1) 33%
    2. Ja, falsch (0) 0%
    3. Ja, falsch UND alt (0) 0%
    4. nein, normal und kann man verwenden (2) 67%

    Hallo,

    Viele behaupten, dass wenn man die Anweisung "exit" benutzt, schreibt man in einem falschen oder altem Programmierstil. Dennoch finde ich immer wieder Programme / Algorithmen wo diese Anweisung verwendet wird. Wie seht ihr das?

    Da ich hier von Delphi rede und diese Anweisung in jeder Programmiersprache anders heißt: "exit" bricht die momentane Funktion / Prozedur sofort ab.

    Zitat


    if 0 = 0
    then exit
    else machirgendwas;

    HP DL-580 G7
    2x Intel Xeon E7-2870 (10 x 2,4GHz)
    96GB DDR3-1333 RAM
    NVIDIA GeForce GTX 1080 MSI (Blower)
    Samsung 850 Pro 512GB auf PCIe Karte
    4TB Seagate billigfieh
    72GB 10K HP Drive

    Einmal editiert, zuletzt von Magic94 (12. März 2013 um 00:08)

  • just darüber bin ich heute gestolpert, die wikipedia hat nen schönen abschnitt dazu, wo u.a. Knuth zitiert wird mit ein paar guten Beispielen warum man nicht alles mit if/else und schleifen machen will

    EDIT: also ich selbst habe mir angewöhnt, "normale" kontrollflüsse schon möglichst alle am ende auslaufen zu lassen, aber bei irgendwelchen randfällen oder fehlern durchaus direkt zurückzuspringen

    Einmal editiert, zuletzt von oreissig (11. März 2013 um 23:52)


  • just darüber bin ich heute gestolpert, die wikipedia hat nen schönen abschnitt dazu, wo u.a. Knuth zitiert wird mit ein paar guten Beispielen warum man nicht alles mit if/else und schleifen machen will

    Zitat

    Von einigen Entwicklern wurde auf der Linux-Kernel-Mailing-Liste die häufige Verwendung von GOTO im Quellcode von Linux diskutiert. Linus Torvalds sagte dabei, dass die Verwendung von GOTO die Lesbarkeit des Quellcodes in vielen Fällen sogar deutlich erhöhen könne


    10GOTO10 :banane::banane::trollface:

    HP DL-580 G7
    2x Intel Xeon E7-2870 (10 x 2,4GHz)
    96GB DDR3-1333 RAM
    NVIDIA GeForce GTX 1080 MSI (Blower)
    Samsung 850 Pro 512GB auf PCIe Karte
    4TB Seagate billigfieh
    72GB 10K HP Drive

    Einmal editiert, zuletzt von Magic94 (11. März 2013 um 23:54)


  • die Betonung liegt eben auf "kann"
    Generell ist vermutlich jedem klar, dass Spaghetticode eine schlechte idee ist, d.h. Abweichungen von strukturierter Programmierung (if, while, ...) sollten schon wohlüberlegt sein und nicht leichtfertig verwendet werden, aber sind nicht prinzipiell zu verbannen

  • Ich versteh ehrlich gesagt die Frage nicht so ganz. Wenn man IRC trauen darf, dann ist dieses "exit" in Delphi das Äquivalent zu "return" in den C-artigen Programiersprachen (und nicht etwa das Äquivalent zu exit() in C oder PHP oder bash).

    Mag zwar die Programmierschule geben, die der Meinung ist, dass Anweisungen wie "return", "break" und "continue" auch nur eine Variante von "goto" im Schafspelz ist und es daher wie goto zu vermeiden ist - wie etwa die Programmiersprache Eiffel, die kein "return" hat - aber so wirklich durchgesetzt hat sich diese Schule nicht. Und ich find Eiffel in der Hinsicht auch mühsam.

    Ich persönlich halte "if 0 <> 0 then machwas;" zwar schöner und lesbarer als dein obiges Beispiel, aber wenn du mehrere Abfragen hast die du verschachteln müsstest, dann halte ich ein vorzeitiges return für schöner als eine if-Verschachtelung.

    Das aber alles wie gesagt unter dem Vorbehalt, dass "exit" hier nur die Funktion beendet, nicht etwa das ganze Programm. Denn dann wäre das echt schlechter Stil.

    Einmal editiert, zuletzt von gandro (11. März 2013 um 23:57)


  • Ich persönlich halte "if 0 <> 0 then machwas;" zwar schöner und lesbarer als dein obiges Beispiel, aber wenn du mehrere Abfragen hast die du verschachteln müsstest, dann halte ich ein vorzeitiges return für schöner als eine if-Verschachtelung.

    War auch grade nur ein Beispiel damit man versteht was ich mit exit meine.
    Ich nutze das ja auch nur wenn die Prozedur selber schon >100 Zeilen ist und der "andere" weg ohne Exit dann gleich nochmal 50 Zeilen drauf kosten würde.

    HP DL-580 G7
    2x Intel Xeon E7-2870 (10 x 2,4GHz)
    96GB DDR3-1333 RAM
    NVIDIA GeForce GTX 1080 MSI (Blower)
    Samsung 850 Pro 512GB auf PCIe Karte
    4TB Seagate billigfieh
    72GB 10K HP Drive

  • der klassiker ist validitätsprüfung von parametern, sowas wie

    Code
    int foo(int bar) {
       if (bar < 0) return -1
       /* insert eigentliche funktionalität here */
    }


    da ist ein "goto" am beginn besser, als den gesamten body einzurücken, weils in einem gigantischen else-zweig steckt

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!