kölir: coding style

Hallo,

ich rücke alles schön ein und bemühe mich meinen Code sauber zu halten, aber was macht ihr so bei langen if klauseln etc? Umbrechen und Einrücken? Wenn ja wie weit? Oder was habt ihr für Lösungen für solche Probleme?

Gruß

  1. echo $begrüßung;

    ich rücke alles schön ein und bemühe mich meinen Code sauber zu halten, aber was macht ihr so bei langen if klauseln etc? Umbrechen und Einrücken? Wenn ja wie weit? Oder was habt ihr für Lösungen für solche Probleme?

    if (eine_recht_lange_bedingung and eine_recht_lange_bedingung and
        eine_recht_lange_bedingung and eine_recht_lange_bedingung) {
      anweisung;
      anweisung;
    }

    oder auch

    if (eine_recht_lange_bedingung and
        (eine_recht_lange_bedingung or was_anderes) and
        eine_recht_lange_bedingung and
        eine_recht_lange_bedingung) {
      anweisung;
      anweisung;
    }

    Ich nehme generell einen Tabulatorsprung, der auf 2 Leerzeichen eingestellt ist. Das ist für mich der beste Kompromiss zwischen Übersichtlichkeit und "Platzverschwendung". Je mehr Leerzeichen man nimmt, desto schneller kommt man "am rechten Rand" (also bei Spalte 80) an und muss schon wieder umbrechen.

    echo "$verabschiedung $name";

    1. Hallo.

      if (eine_recht_lange_bedingung and
          (eine_recht_lange_bedingung or was_anderes) and
          eine_recht_lange_bedingung and
          eine_recht_lange_bedingung) {
        anweisung;
        anweisung;
      }

      Wird bei mir

        
      if(eine_recht_lange_bedingung &&  
          (eine_recht_lange_bedingung || was_anderes) &&  
          eine_recht_lange_bedingung &&  
          eine_recht_lange_bedingung)  
      {  
          anweisung;  
          anweisung;  
      }  
      
      

      Ich nehme generell einen Tabulatorsprung, der auf 2 Leerzeichen eingestellt ist. Das ist für mich der beste Kompromiss zwischen Übersichtlichkeit und "Platzverschwendung". Je mehr Leerzeichen man nimmt, desto schneller kommt man "am rechten Rand" (also bei Spalte 80) an und muss schon wieder umbrechen.

      Was auch ein Zeichen dafür sein kann, dass man zu tief verschachtelt hat und überlegen sollte, ob man Code-Teile (auf welche Art auch immer) auslagern sollte; mein Kompromiss: ein Tabulator à 4 Leerzeichen.

      Christoph

      1. Hello,

        stellt sich noch die ketzerische Frage, ob ein lockerer Schreibstil, also mit vielen kurzen übersichtlichen Zeilen, vielen Leerzeilen, Trennlinen und optischen Blockbildungen sich negativ auf die Laufleistung eines Programms oder etwa auf die Dateigröße auswirkt.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

        1. Abend.

          stellt sich noch die ketzerische Frage, ob ein lockerer Schreibstil, also mit vielen kurzen übersichtlichen Zeilen, vielen Leerzeilen, Trennlinen und optischen Blockbildungen sich negativ auf die Laufleistung eines Programms oder etwa auf die Dateigröße auswirkt.

          Und jemand, der so eine Frage stellt, rät dazu, Leerzeichen statt Tabulatoren zu verwenden? ;)

          Wäre vielleicht wirklich interessant, das mal spaßeshalber im Fall von PHP - weit verbreitet, aber nicht gerade duch Leistung glänzend - zu testen...

          Und jetzt mal wieder etwas ernster: Bei Performance-kritischen Anwendungen sollte man ja wohl sowieso von rein interpretierten Sprachen Abschied nehmen (oder einen Caching-Mechanismus implementieren)...

          Christoph

          1. Hello,

            Und jetzt mal wieder etwas ernster: Bei Performance-kritischen Anwendungen sollte man ja wohl sowieso von rein interpretierten Sprachen Abschied nehmen (oder einen Caching-Mechanismus implementieren)...

            Na, da gibt es für PHP durchaus einige, die Faktor 0.25 locker schaffen, also nur noch 1/4 der Zeit benötigen für die Scriptausführung, wenn man sie benutzt. Je größer das Script wird, desto mehr verschiebt es sich noch Richtung 1/5. Allerdings habe ich bisher nur ca. 560kByte Code "geschafft".

            Harzliche Grüße vom Berg
            http://bergpost.annerschbarrich.de

            Tom

            --
            Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
            Nur selber lernen macht schlau
            Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    2. Hello,

      if (eine_recht_lange_bedingung and eine_recht_lange_bedingung and
            eine_recht_lange_bedingung and eine_recht_lange_bedingung)
        {
            anweisung;
            anweisung;
        }

      Ich weiß nicht, wer sich den "Standard" mit der öffnenden Block-Klammer gleich hinter der Code-Zeile ausgedacht hat. Es ist durch diverse Untersuchungen nachgeweisen, dass die Fehlerquote bei jener Schreibweise wesentlich höher ist, als die bei der von mir oben gezeigten.

      Genauso sollte man im Zeitalter von Copy & Paste, Foren und Boards, usw. keine beständigen Tabulatoren für die Einrückungen benutzen, sondern den Editor so einstellen, dass er sie in Leerzeichen umwandelt.

      Leider weiß ich nicht, unter welchem Stichwort ich die Ergebnisse bei Google finden könnte, aber ich habe vor Jahren selber in BS an einer solchen Studie teilgenommen, und weiß, dass sie an andern Unis (Clausthal, Göttingen) später auch durchgeführt wurden. Die Ergebnisse waren ähnlich.

      Je gedrängter und spaghettimäßiger der Code formatiert wurde, desto höher war die Fehlerquote.

      Formatfreie Sprache heißt ja noch lange nicht, dass man nicht gewisse sinnvolle Standards einhalten sollte.

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      1. Hello,

        ... unabhängig von meiner Aussage noch ein Link auf eine recht sortierte Seite zum Thema "Coding Standard in PHP"

        http://php-coding-standard.de/php_coding_standard.php

        Andere machen sich auch Gedanken, auch wenn es vielleicht manchmal andere Gedanken sind.

        Harzliche Grüße vom Berg
        http://bergpost.annerschbarrich.de

        Tom

        --
        Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
        Nur selber lernen macht schlau
        Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      2. Hallo Tom,

        Genauso sollte man im Zeitalter von Copy & Paste, Foren und Boards, usw. keine beständigen Tabulatoren für die Einrückungen benutzen, sondern den Editor so einstellen, dass er sie in Leerzeichen umwandelt.

        ich schreibe Code nicht für Foren. Auch nicht für Copy & Paste. Ich bin ein
        Befürworter von Tabulatoren, da sich so Style-Guides mit individueller Vorliebe
        am einfachsten ohne Umformatieren einhalten lassen.

        Bei mir ist der Tabulator auf die Breite von 4 Zeichen eingestellt. Zwei sind
        mir persönlich schon zuwenig.

        Freundliche Grüße

        Vinzenz

        1. Hello Vinzenz,

          ich schreibe Code nicht für Foren. Auch nicht für Copy & Paste.

          aber vielleicht im Team?

          Ich bin ein
          Befürworter von Tabulatoren, da sich so Style-Guides mit individueller Vorliebe
          am einfachsten ohne Umformatieren einhalten lassen.

          Bei mir ist der Tabulator auf die Breite von 4 Zeichen eingestellt. Zwei sind
          mir persönlich schon zuwenig.

          Du kannst Deine Tabulator-Taste auch sorglos benutzten. Wenn die Datei abgespeichert wird, sollten die Tabs allerdings aufgelöst werden. Die vier Zeichen sind auch der empfoohlene Wert. Ich werde mich da wohl auch endlich mal umstellen müssen...

          Noch ein Wort zu dem Link au dem anderen Posting.
          Dort wird z.B. etwas über Kommentarzeichen geschrieben

          http://php-coding-standard.de/mhtml/regel06.html

          Der gedankenlosen Verwendung von /* ... */  für Kommentare würde ich z.B. wiedersprechen. Ein beständiger Kommentar (innerhalb des Codebereiches) sollte immer so angelegt werden, dass er selber (zusammen mit einem Codeblock) auch noch auskommentiert werden kann. Soweit ich das jetzt nachvollziehen kann, hat PHP nur einen "Masterkommtar", nämlich /* */. Wenn das so ist, dann sollte man sich diese Zeichen "aufsparen" für temporäre Kommentierungen.

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          1. Hello out there!

            Tom:

            Genauso sollte man im Zeitalter von Copy & Paste, Foren und Boards, usw. keine beständigen Tabulatoren für die Einrückungen benutzen, sondern den Editor so einstellen, dass er sie in Leerzeichen umwandelt.

            NAK.

            Vinzenz:

            Ich bin ein Befürworter von Tabulatoren, da sich so Style-Guides mit individueller Vorliebe am einfachsten ohne Umformatieren einhalten lassen.

            Full ACK.

            (Vinzenz, du bist konvertiert? :-) [</archiv/2005/8/t114102/#m726555>])

            Tom:

            Du kannst Deine Tabulator-Taste auch sorglos benutzten. Wenn die Datei abgespeichert wird, sollten die Tabs allerdings aufgelöst werden.

            Nein, denn dann hätte ja ein anderer, der den Code weiterbearbeitet, _deine_ bevorzugte Einrückung, nicht _seine_.

            Einzug heißt Tabulator, nicht eine willkürliche Anzahl von Leerzeichen. [</archiv/2007/4/t150318/#m977065> und dortige Links]

            See ya up the road,
            Gunnar

            --
            „Und [dieses Forum] soll […] auch ein Fachforum bleiben und kein Psychologieforum werden.“ (Kirsten Evers)
            1. Hallo Gunnar,

              Vinzenz:

              Ich bin ein Befürworter von Tabulatoren, da sich so Style-Guides mit individueller Vorliebe am einfachsten ohne Umformatieren einhalten lassen.

              Full ACK.

              (Vinzenz, du bist konvertiert? :-) [</archiv/2005/8/t114102/#m726555>])

              ich verwende inzwischen andere Editoren - und bin deswegen wieder zurück, wo
              ich mal war.

              Wie sagte ich noch: "... über Vorlieben läßt sich nicht streiten."
              Es soll aber vorkommen, dass sie sich ändern ...

              Freundliche Grüße

              Vinzenz

      3. Hallo,

        if (eine_recht_lange_bedingung and eine_recht_lange_bedingung and
              eine_recht_lange_bedingung and eine_recht_lange_bedingung)
          {
              anweisung;
              anweisung;
          }

        sieht schon viel besser aus. ;-)

        Ich weiß nicht, wer sich den "Standard" mit der öffnenden Block-Klammer gleich hinter der Code-Zeile ausgedacht hat. Es ist durch diverse Untersuchungen nachgeweisen, dass die Fehlerquote bei jener Schreibweise wesentlich höher ist, als die bei der von mir oben gezeigten.

        Ich kenne diese Untersuchungen nicht, kann die Aussage aber für mich bestätigen. Deswegen setze ich auch andere, für das Erfassen und Verstehen wichtige Token nie ans Zeilenende, sondern an den Zeilen_anfang_. Das oben beispielhaft skizzierte if-Statement würde bei mir deshalb so aussehen:

        if (eine_recht_lange_bedingung and eine_recht_lange_bedingung
           && eine_recht_lange_bedingung and eine_recht_lange_bedingung)

        Auch längere Summenausdrücke schreibe ich gern mehrzeilig, wobei das Pluszeichen bei mir dann immer am Anfang der Folgezeile steht, sauber untereinander ausgerichtet. Das bildet auch den zugehörigen "Denkprozess" besser ab:

        $summe = $basis
                 + $beitrag1
                 + 3 * $beitrag2
                 - $beitrag3;

        Da stellt jede Zeile einen in sich abgeschlossenen Denkschritt dar; die ebenfalls häufig anzutreffende Schreibweise mit dem Plus- oder Minuszeichen am Ende der Zeile ist IMHO nicht so klar nachvollziehbar.

        Genauso sollte man im Zeitalter von Copy & Paste, Foren und Boards, usw. keine beständigen Tabulatoren für die Einrückungen benutzen, sondern den Editor so einstellen, dass er sie in Leerzeichen umwandelt.

        ACK.

        Formatfreie Sprache heißt ja noch lange nicht, dass man nicht gewisse sinnvolle Standards einhalten sollte.

        Sicher, aber was sinnvoll ist, empfindet jeder etwas anders. Ich halte es deshalb für falsch, einen bestimmten Stil allgemein als "richtig" hinstellen oder gar vorschreiben zu wollen - empfehlen und/oder diskutieren dagegen schon. "Richtig" ist dann, womit jeder einzelne, der diesen Code schreibt, am besten zurechtkommt.

        So long,
         Martin

        --
        Der Bäcker schlägt die Fliegen tot
        Und macht daraus Rosinenbrot.
        1. Hello,

          Ich kenne diese Untersuchungen nicht, kann die Aussage aber für mich bestätigen. Deswegen setze ich auch andere, für das Erfassen und Verstehen wichtige Token nie ans Zeilenende, sondern an den Zeilen_anfang_. Das oben beispielhaft skizzierte if-Statement würde bei mir deshalb so aussehen:

          if (eine_recht_lange_bedingung and eine_recht_lange_bedingung
             && eine_recht_lange_bedingung and eine_recht_lange_bedingung)

          Da hast Du Recht. das habe ich bisher "gelegentlich" so gemacht, mir aber nie wirklich bewusst gemacht, wie es "richtig" ist. Wie machst Du das bei String-Verknüpfungen ( . )?
          Kommen die Punkte an den Anfang der nachfolgenden Zeile oder ans Ende der angefangenen Zeile?

          Auch längere Summenausdrücke schreibe ich gern mehrzeilig, wobei das Pluszeichen bei mir dann immer am Anfang der Folgezeile steht, sauber untereinander ausgerichtet. Das bildet auch den zugehörigen "Denkprozess" besser ab:

          $summe = $basis
                   + $beitrag1
                   + 3 * $beitrag2
                   - $beitrag3;

          Das finde ich auch gut. Werde ich mir mal merken.

          In diesem Zusammenhang hat eigentlich Vinzenz in den vergangenen Wochen die SQL-Statements immer mustergültig formatiert.

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          1. Hallo Tom,

            if (eine_recht_lange_bedingung and eine_recht_lange_bedingung
               && eine_recht_lange_bedingung and eine_recht_lange_bedingung)

            Da hast Du Recht. das habe ich bisher "gelegentlich" so gemacht, mir aber nie wirklich bewusst gemacht, wie es "richtig" ist. Wie machst Du das bei String-Verknüpfungen ( . )?
            Kommen die Punkte an den Anfang der nachfolgenden Zeile oder ans Ende der angefangenen Zeile?

            ich setze sie - wie andere Operatoren auch - wie Martin an den Beginn der
            neuen Zeile.

            In diesem Zusammenhang hat eigentlich Vinzenz in den vergangenen Wochen die SQL-Statements immer mustergültig formatiert.

            Danke für die Blumen. Ich bemühe mich in der Regel stets darum, lesbaren Code zu
            schreiben - nicht nur bei SQL.

            Freundliche Grüße

            Vinzenz

            1. Hello,

              Danke für die Blumen. Ich bemühe mich in der Regel stets darum, lesbaren Code zu
              schreiben - nicht nur bei SQL.

              Bitte! Ehre, wem Ehre gebührt.

              Ich übe da noch...

              Aber im Prinzip versuche ich schon, es einem meiner Lehrmeister Recht zu machen, der immer sagte, ein Programm müsse man lesen können wie ein gutes Buch. Man fange vorne an und wenn man hinten angekommen ist, wisse man genau, wie alles funktioniert. Zugegeben, diese Aussage stammt noch aus der Zeit der 32k großen Programme, die außerdem Top Down erstellt wurden. Aber irgendwie sollte man diesen Stil auch heute noch anstreben, finde ich.

              Harzliche Grüße vom Berg
              http://bergpost.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          2. Hi,

            Wie machst Du das bei String-Verknüpfungen ( . )?
            Kommen die Punkte an den Anfang der nachfolgenden Zeile oder ans Ende der angefangenen Zeile?

            gute Frage eigentlich ...
            Ich habe selten so umfangreiche Stringverknüpfungen, dass es sich überhaupt lohnen würde, sie auf mehrere Zeilen zu splitten. Ja, ich glaube, ich würde den Punkt dann auch an den Zeilenanfang setzen, auch wenn's irgendwie seltsam aussieht.
            Wobei ... der Punkt als Stringverkettungs-Operator kam mir in PHP schon immer eigenartig vor; mir ist es bis heute nicht gelungen, mich soweit daran zu gewöhnen, dass ich beim Lesen solcher Anweisungen nicht kurz ins Stocken komme.

            Auch längere Summenausdrücke schreibe ich gern mehrzeilig, ...
              $summe = $basis
                     + $beitrag1
                     + 3 * $beitrag2
                     - $beitrag3;
            Das finde ich auch gut. Werde ich mir mal merken.

            Gut, dass wir drüber gesprochen haben. :-)

            In diesem Zusammenhang hat eigentlich Vinzenz in den vergangenen Wochen die SQL-Statements immer mustergültig formatiert.

            Das ist wahr. Ich habe selbst noch nicht aktiv mit SQL zu tun gehabt, aber ich würde ihm auch eine sehr übersichtliche Schreibweise attestieren.

            Schönen Abend noch,
             Martin

            --
            Paradox ist, wenn der Innenminister sich äußert und der Außenminister sich erinnert.
      4. echo $begrüßung;

        Ich weiß nicht, wer sich den "Standard" mit der öffnenden Block-Klammer gleich hinter der Code-Zeile ausgedacht hat.

        Die Wikipedia weiß dass sich den "One True Brace Style" die C-Erfinder Kernighan und Ritchie ausgedacht haben.
        Erstaunlicherweise erhitzt diese Marginalität anscheinend die Gemüter mehr als wirkliche Programmier-Stil-Fehler, wie z.B. Variablen nicht explizit initialisiert, Rückgabewerte nicht ausgewertet.

        echo "$verabschiedung $name";

        1. Hello,

          Die Wikipedia weiß dass sich den "One True Brace Style" die C-Erfinder Kernighan und Ritchie ausgedacht haben.

          Nun weiß ich also wenigstens, dass ich den Allman-Stil bevorzuge :-)

          Erstaunlicherweise erhitzt diese Marginalität anscheinend die Gemüter mehr als wirkliche Programmier-Stil-Fehler, wie z.B. Variablen nicht explizit initialisiert, Rückgabewerte nicht ausgewertet.

          Naja, es ging da um Formatierung.

          Initialsierung von Variablen gehört dann doch zu einem anderen Themenkomplex innerhalb der Programmier-Regeln.

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

      5. Hallo Tom,

        Ich weiß nicht, wer sich den "Standard" mit der öffnenden Block-Klammer gleich hinter der Code-Zeile ausgedacht hat. Es ist durch diverse Untersuchungen nachgeweisen, dass die Fehlerquote bei jener Schreibweise wesentlich höher ist, als die bei der von mir oben gezeigten.

        Hmm, immer wenn Leute, was Coding Standards angeht, mit irgendwelchen Untersuchungen kommen, werde ich sehr, sehr skeptisch.

        Die einzige Art Fehler, den Du meinen kannst, ist der, dass man die Klammer vergisst und damit von der Verschachtelung abweicht, bsp:

        if (bedingung)
            anweisung1;
            anweisung2;

        Dann würde anweisung2 auf Grund der vergessenen Klammer immer ausgeführt werden und nicht nur in Abhängigkeit der Bedingung.

        Dazu kann ich nur sagen: Ich kann mich nicht entsinnen, diesen Fehler JEMALS begangen zu haben, egal bei welcher Coding-Konvention. Und ich programmiere schon seit bestimmt mindestens 8 Jahren in Sprachen, die solche geschweiften Klammern verwenden. Gut, kann sein dass mir das auch schonmal passiert ist, aber höchstens ein oder zweimal überhaupt.

        Dafür mache ich, wenn ich Deine Konvention verwende (Klammer auf der neuen Zeile) andere Fehler: Ich sehe deutlich (!) weniger Code auf dem Bildschirm und dadurch verringert sich mein Überblick - weswegen ich damit logische Fehler ins Programm baue.

        Was jetzt nicht heißen soll, dass ich für die Notation "Klammer auf der gleichen Zeile" jetzt unbedingt eine Empfehlung aussprechen will - ich bin sicher auch nicht repräsentativ.

        Mein Punkt ist nur der: In meinen Augen kommt es, was solche Details angeht, VIEL mehr auf persönlichen Geschmack an, als auf irgendwelche angeblichen Untersuchungen, was denn nun tatsächlich besser sei. Klar, es gibt Dinge, die einfach grundsätzlich blödsinnig sind, zum Beispiel gar nicht einzurücken. Aber: Was solche Detailfragen angeht sollte man in meinen Augen VIEL EHER seinem persönlichen Geschmack folgen als auf irgendwelche komischen Untersuchungen oder Studien zu hören. Denn in meinen Augen ist es VIEL wichtiger, dass man sich im eigenen Code "wohl fühlt", um Fehler zu vermeiden, als sich von irgendwelchen Behauptungen diesbezüglich beeinflussen zu lassen.

        Klar, wenn man im Team arbeitet, muss man sich natürlich auf eine Coding-Konvention einigen, mit der alle Leben können. Aber auch hier sollten in meinen Augen eher die persönlichen Präferenzen der Team-Mitglieder in Betracht gezogen werden als irgendwelche Untersuchungen.

        In meinem Posting meine ich hier aber wirklich nur Detailfragen wie "Klammer auf der gleichen oder auf der neuen Zeile?" oder "Wo kommt das Leerzeichen (wenn überhaupt) bei runden Klammern hin?" oder "wie viele Zeichen rücke ich pro Ebene ein?" oder sowas. Dass man zumindest prinzipiell einrücken sollte (in welcher Form auch immer) und ähnliches, ist in meinen Augen immer einzuhalten.

        Viele Grüße,
        Christian

        1. Hello Christian,

          prinzipiell stimme ich Dir schon zu.
          Es geht bei den einfachen Variationen immer nur um das persönliche Wohlfühlerlebnis.

          Zum Glück sind die Zeiten von 80x25 Zeichen nun aber schon länger vorbei. Ich habe damals bei meiner intensiver Pascal-Programmierung (so ca. 1990) schon immer versucht, möglichst 100x50 einzustellen, was aber leider nicht jeder Arbeitsplatz konnte.

          Daher kommen auch die spärlichen Einrückungen mit nur 2 Zeichen pro Ebene, die ich mir aber gerade zugunsten des am weitesten verbreiteten "Standards" 4 Zeichen abgewöhne...

          Die Schirme werden ja auch breiter und breiter und zur Not kann ich nachher ja auch meinen A3-Drucker im Querformat quälen. das ist jetzt nicht witzig gemeint, sondern durchaus ernst.
          Aber da hat man dann schon wieder das Problem, dass man mit den Augen die Zeile verliert. Ich denke, bei ca. 100 Zeichen pro Zeile ist da einfach Schluss.

          Persönlich mag ich z.B. gar nicht gerne die vollständig Strukturierte Programmierung nach Nassi/Shneiderman einhalten. Da plädiere ich immer für in der Länge überschaubare Funktionen und Returns an der geeigneten Stelle, was dann aber gerne mal Lost Handles oder vergessene Destruktoren usw. produzieren hilft...

          Das ist aber auch persönlicher Geschmack. Es sind dann einfach weniger Klammeerebenen nötig.

          Da bedaure ich bei PHP immer, dass es keine Marken gibt:
          (odser vielleicht habe ich sie auch nur noch nicht gefunden?)
          Wenn der E- und der V-Teil des Scriptes beendet sind und man zur Ausgabe schreiten will, einfach ein "GOTO HTML" in den Code... das würde mir schon gut gefallen ;-))

          Wenigstens diese eine Marke hätte ich gerne. Die könnte von mir aus sogar fest an die Zeile gebunden sein, in der in der Datei die Document-Vereinbarung steht. Dann kann man sie wenigstens nicht vergessen.

          Harzliche Grüße vom Berg
          http://bergpost.annerschbarrich.de

          Tom

          --
          Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
          Nur selber lernen macht schlau
          Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

          1. Hallo Tom,

            Da bedaure ich bei PHP immer, dass es keine Marken gibt:
            (odser vielleicht habe ich sie auch nur noch nicht gefunden?)

            Es gibt einen inoffiziellen Patch für PHP 5.1 (http://pecl.org/patches/opcode_goto_5.1.0.diff), der jedoch nie weiterentwickelt wurde und deswegen mit PHP 5.2 nicht so ohne weiteres funktioniert. Zudem wird man damit inkompatibel zum Rest der PHP-Welt.

            Siehe: http://news.php.net/php.internals/11599

            Wenn der E- und der V-Teil des Scriptes beendet sind und man zur Ausgabe schreiten will, einfach ein "GOTO HTML" in den Code... das würde mir schon gut gefallen ;-))

            Da gibt es sehr viele Alternativen, bspw. mit Exceptions:

            class MySoftwareError extends Exception {}  
              
            try {  
              
            // hier das normale script  
            // ...  
              
            // oh, hier ist ein fehler  
            if ($fehler) {  
              throw new MySoftwareError (...);  
            }  
              
            // weiter im code  
              
            } catch (MySoftwareError $e) {  
              // hier den fehler ausgeben, infos sind in $e zu finden  
            }
            

            Das hat im Vergleich zu goto sogar den Vorteil, dass Du in Funktionen oder Methoden diese Exception werfen kannst, d.h. dort direkt "rausspringen" kannst.

            Viele Grüße,
            Christian

            1. Hello Christian,

              das hätte ich jetzt nicht gedacht, dass sich darüber tatsächlich mal jemand Gedanken gemacht hat.

              Ich stimme Dir schon zu, dass die andere Lösung sauberer ist.
              Ich aber auch wesentlich aufwändiger.

              Aber ich komme sowieso nicht drum herum, meine ganzen Toolboxen irgendwann in OOP umzusetzen. Dann muss sowieso ein vernünftiges Konzept her.

              Harzliche Grüße vom Berg
              http://bergpost.annerschbarrich.de

              Tom

              --
              Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
              Nur selber lernen macht schlau
              Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

    3. Hallo,

      Der 1TBS-Stil für Einrückungen liegt mir am besten. Ein Problem mit vergessenen Klammern habe ich nie, weil ich immer zuerst beide Klammen hinschreibe. Ein if-Statement z.B. fängt bei mir immer so an:

      if(){}

      Dann folgt das:

      if(){

      }

      und dann erst wird der Code eingestzt:

      if(Bedingung){
        machsFertig();
      }

      Was mich bzgl. Programmierstil schon lange interessiert: Wie macht ihr das in Funktionen, wenn bedingte Anweisungen mitspielen, wie in folgendem Pseudocode:

      function diesOderDas(wetter) {

      wenn (wetter ist schön) {

      result = wir unternehmen dieses

      } sonst {

      result = wir unternehmen jenes
        }

      return result
      }

      1. Man könnte das ja auch so notieren:

      function diesOderDas(wetter) {

      result = wir unternehmen jenes

      wenn (wetter ist schön) {

      result = wir unternehmen dieses
        }

      return result
      }

      1. Oder so:

      function diesOderDas(wetter) {

      wenn (wetter ist schön) {

      return wir unternehmen dieses

      } else {

      return wir unternehmen jenes
        }
      }

      1. Oder so (von mir bevorzugt):

      function diesOderDas(wetter) {

      wenn (wetter ist schön) {

      return wir unternehmen dieses
        }

      return wir unternehmen jenes
      }

      Variante 4 gefällt mir am besten, weil man z.B. die einfachen Fälle bzw. solche, die weniger Code brauchen, gleich am Anfang abhandeln kann und man keine weitere Einrückung in einem else-Zweig benötigt, der evtl. wesentlich mehr Code enthält.

      Gruß, Don P

      1. Hi,

        Der 1TBS-Stil für Einrückungen liegt mir am besten. Ein Problem mit vergessenen Klammern habe ich nie, weil ich immer zuerst beide Klammen hinschreibe.

        das mach ich auch so, trotzdem ist mir die Notation mit Klammern am Anfang der Zeile lieber. Ich selbst hab mich da auch noch nicht verstolpert, bin aber bei Fremdcode schon einige Male schwer ins Schleudern gekommen, weil ich die unauffällig am Zeilenende stehende Klammer übersehen habe.

        Was mich bzgl. Programmierstil schon lange interessiert: Wie macht ihr das in Funktionen, wenn bedingte Anweisungen mitspielen, wie in folgendem Pseudocode:

        Mal abgesehen von der Position der öffnenden Klammer ...

        1. Oder so (von mir bevorzugt):

        function diesOderDas(wetter) {
          wenn (wetter ist schön) {
            return wir unternehmen dieses
          }
          return wir unternehmen jenes
        }

        ist das auch meine bevorzugte Struktur: Sobald das Funktionsergebnis feststeht, beende ich die Funktion. Wenn die Funktion natürlich noch irgendwelche "Aufräumarbeiten" braucht, scheidet das Prinzip aus.

        Variante 4 gefällt mir am besten, weil man z.B. die einfachen Fälle bzw. solche, die weniger Code brauchen, gleich am Anfang abhandeln kann und man keine weitere Einrückung in einem else-Zweig benötigt, der evtl. wesentlich mehr Code enthält.

        Es gibt noch ein Argument für diesen Stil: Selbst wenn alle Stricke reißen und keine Bedingung so zutrifft, wie man es eigentlich erwartet hat, greift immer noch das letzte return-Statement und man hat auf jeden Fall einen definierten Rückgabewert.

        Ciao,
         Martin

        --
        Die letzten Worte der Challenger-Crew:
        Lasst doch mal die Frau ans Steuer!
      2. echo $begrüßung;

        Was mich bzgl. Programmierstil schon lange interessiert: Wie macht ihr das in Funktionen, wenn bedingte Anweisungen mitspielen, wie in folgendem Pseudocode:

        Ich entscheide das im konkreten Einzelfall. Prinzipiell versuche ich ohne temporäre Variablen auszukommen, wenn das betreffende Codestück übersichtlich bleibt.

        Wenn der Fall wirklich so einfach ist wie im Beispiel täte es auch ein:

        wir unternehmen (wetter ist schön ?  dieses : jenes)

        echo "$verabschiedung $name";

  2. Ahoi,

    für komplexere Sachen nehme ich gerne Hilfsvariablen.
    Ungefähr so

    rule1 = eine_recht_lange_bedingung
    rule2 = eine_recht_lange_bedingung
    rule3 = eine_recht_lange_bedingung

    if ( rule1 or rule2 or (rule2 and rule3)){

    anweisung;
      anweisung;
    }

    So kann man gut Kommentare ergänzen und hat die Evaluation der Zustände
    und deren logische Verknüpfung hübsch getrennt.

    Zur Fehlersuche oder zum Testen kann man dann auch schnell mal eine Regel
    hart auf true oder false setzen indem man eine entsprechende Zeile ergänzt.
    Z.B.
    rule2 = false

    Statt "rule" kann man auch sprechende Namen wählen, also z.B.

    if (HeuteIstWeihnachten and BaumStehtGerade and JemandPasstAuf){
     KerzenAnzünden
    }

    dann sieht man gleich worum es geht.

    Am besten ist es natürlich wenn man schwer nachvollziehbare
    Konstruktionen ganz vermeiden kann.

    Viele Grüße

    Stefan

    --
    bythewaythewebsuxgoofflineandenjoytheday
    1. Hello Stefan,

      für komplexere Sachen nehme ich gerne Hilfsvariablen.
      Ungefähr so

      rule1 = eine_recht_lange_bedingung
      rule2 = eine_recht_lange_bedingung
      rule3 = eine_recht_lange_bedingung

      if ( rule1 or rule2 or (rule2 and rule3)){

      anweisung;
        anweisung;
      }

      So kann man gut Kommentare ergänzen und hat die Evaluation der Zustände
      und deren logische Verknüpfung hübsch getrennt.

      da habe ich ein Negativbeispiel aus einer Funktion, die ich vorhin (hoffentlich) etwas betriebssicherer gemacht habe:

      Original:
      ---------

      $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", fread($f1,14));
         if ($FILE['file_type'] != 19778) return FALSE;

      "Fälschung" von mir:
      --------------------

      $buffer = fread($f1,14);
         if (strlen($buffer) != 14)
         {
             fclose($f1);
             return false;
         }

      $FILE = unpack("vfile_type/Vfile_size/Vreserved/Vbitmap_offset", $buffer);

      if ($FILE['file_type'] != 19778)
         {
             fclose($f1);
             return FALSE;
         }

      Hier steckten zwei mMn gravierende Fehler im Code:

      1.  Das Ergebnis der read()-Funktion wurde nicht verifiziert.
          Man kann 14 Bytes anfordern, aber z.B. nur 7 geliefert bekommen.

      2.  Beim Abbruch der Funktion, die im Realbetrieb durchaus schon mal 300 Mal in
          einer Schleife aufgerufen wird, wird ein Lost Handle erzeugt.

      Beide Fehler sind beliebt und führen im harten Einsatz regelmäßig zum Absturz des Systems bzw. des Mutterprozesses (oder sagt man Vaterprozess?).

      Harzliche Grüße vom Berg
      http://bergpost.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau
      Ein Jammer ist auch, dass die Dummen so selbstsicher und die Klugen voller Zweifel sind. Das sollte uns häufiger zweifeln lassen :-)

  3. Och, ich schreibe alles in eine Zeile - hab nen 24-Zöller und daneben nen 19-Zöller - hat bisher gereicht *ggg*

    *SCNR*

    Gruß,
    Manu

    --
    Deutschland ist einfach von einer Diktatur der Nationalsozialisten zu einer Diktatur der Gutmenschen übergegangen.
    1. Hallo Manu!

      Och, ich schreibe alles in eine Zeile - hab nen 24-Zöller und daneben nen 19-Zöller - hat bisher gereicht *ggg*

      Du musst nicht lachen, Deine Aussage ist nicht so falsch...

      Ich schreibe alles in einer Zeile, was mMn in einer Zeile gehört.

      Ich musste einmal Dateien bearbeiten, die mit Tidy erstellt worden waren. Ich kenne Tidy nicht, ist auch schon länger her, und deswegen weiß ich nicht, wie es heute aussieht. Jedenfalls waren mitten in den Tags hartcodierte Returns, natürlich nicht einem bestimmten Muster folgend, sondern immer an anderer Stelle, etwa so:

      <img src=
      "/blubb/blobb.gif" width=
      "400" height="500"
      alt="blubbblobb">

      Ein Suchen/Ersetzen ist mit solch einem Kot unmöglich. Nein, alles, was in einer Zeile gehört bekommt eine Zeile, den Zeilenumbruch kann man im Editor einstellen, wenn man nicht scrollen will.

      Viele Grüße aus Frankfurt/Main,
      Patrick

      --

      _ - jenseits vom delirium - _
      [link:hatehtehpehdoppelpunktslashslashwehwehwehpunktatomicminuseggspunktcomslash]
      Nichts ist unmöglich? Doch!
      Heute schon gegökt?
      1. Hallo

        ... Jedenfalls waren mitten in den Tags hartcodierte Returns, natürlich nicht einem bestimmten Muster folgend, sondern immer an anderer Stelle, etwa so:

        <img src=
        "/blubb/blobb.gif" width=
        "400" height="500"
        alt="blubbblobb">

        Die Downloadversion der PHP-Dokumentation (many html files) sieht ähnlich aus. Jedes Attribut bekommt eine eigene Zeile. Da gibt man den Plan, dem Paket eine CSS-Datei zuzuweisen, gleich wieder auf. :-(

        Tschö, Auge

        --
        Die Musik drückt aus, was nicht gesagt werden kann und worüber es unmöglich ist zu schweigen.
        (Victor Hugo)
        Veranstaltungsdatenbank Vdb 0.2