Codestyle: Einrücken untergeordneter Abschnitte?



  • Hi,

    Stylefrage 1:

    vor ein paar Monaten hatte ich Mal gefragt, wie so diverse Codestyles angenommen werden. Dabei kam raus, dass beispielsweise so etwas:

    class Style
    {
    private:
    	const	Class1&	GetThis() const {return x;}
    			 Class2&	GetThat();
    
    	void		        SetThis(const Class1&);
    	void		        SetThat(const Class2&);
    };
    

    nicht gut ankam. Ich finde schön, dass man alle Methodennamen auf einer Höhe hat, quasi ein Linear daneben legen kann und somit bzgl. der Namen eine Übersicht hat, da kam aber viel contra... daher habe ich mir das jetzt auch abgewöhnt. 🙄

    Stylefrage 2:
    Obiges kann ja diskutiert werden, wenn noch was hoffen ist. Heute frage ich mich, ob geklammerte Ausdrücke eingerückt werden dürfen, wenn sie viele Parameter haben. Sagen wir, ich habe ein Objekt mit einem ctor mit 10 Elementen (ob das jetzt zu viel ist, sei mal dahingestellt) und möchte dieses neue Objekt in einen vector pushen, der ganz überflüssigerweise noch von woanders hergeholt werden soll... lange Rede, kürzerer Code:

    GetElements().push_back(SomeObject(param1, param2, param3, param4, param5,
    	param6, param7, param8, param9, param10));
    

    Das ist noch okay, weil es keine Funktion mit zwei oder drei Parametern ist, aber schnell wird es noch unübersichtlicher. Daher finde ich eigentlich schön es so zu schreiben:

    GetElements().push_back(SomeObject(	param1, param2, param3, param4, param5,
    						        	   param6, param7, param8, param9, param10));
    

    So sieht man direkt, dass die Parameter zu SomeObject gehören, ist quasi einfach ein "Parameterblock". Gleiches gilt für lange Elementinitialisierer. Krieg ich dafür auch Dresche? Wenn ja, wieso?



  • Für mich gilt immer der Grundsatz, das ein Stil nur dann akzeptabel ist, wenn er mit einem Minimum an Aufwand gepflegt werden kann. Deshalb fällt das Beispiel 1 vollkommen aus, Beispiel 2 wäre OK. Ich würde allerdings die Leerzeichen vor dem ersten Parameter weglassen.



  • Ja, würde ich an sich auch gerne, aber ich tabbe mir das ja immer so hin. Oder sollte man mit Leerzeichen arbeiten und Tabs auf "4 Leerzeichen" in der IDE umstellen?



  • Tabs benutze ich ausschließlich als Einrückung (bzw. als Trigger für automatisches Einrücken), niemals als Zwischenraum innerhalb einer Zeile.



  • Und um das zu realisieren ist die Tab-Taste bei Dir auf Leerzeichen in der IDE eingestellt?



  • Bashar schrieb:

    Tabs benutze ich ausschließlich als Einrückung (bzw. als Trigger für automatisches Einrücken), niemals als Zwischenraum innerhalb einer Zeile.

    Mache ich auch so.

    Siehe auch: http://www.iovene.com/61/

    In the end, it doesn’t matter whether you use TABs or space, for indenting, as long as you use just spaces for aligning.



  • Eisflamme schrieb:

    Und um das zu realisieren ist die Tab-Taste bei Dir auf Leerzeichen in der IDE eingestellt?

    Was zu realisieren?

    Ja, ich lasse Leerzeichen einfügen, aber das hat ja mit dem, worüber wir uns gerade unterhalten, nicht viel zu tun.



  • Eisflamme schrieb:

    GetElements().push_back(SomeObject(	param1, param2, param3, param4, param5,
    						        	   param6, param7, param8, param9, param10));
    

    So sieht man direkt, dass die Parameter zu SomeObject gehören, ist quasi einfach ein "Parameterblock". Gleiches gilt für lange Elementinitialisierer. Krieg ich dafür auch Dresche? Wenn ja, wieso?

    Für mich optisch zu weit auseinander. Dann breche ich lieber um, und rücke dort etwas ein. Beispiel:

    GetElements().push_back(SomeObject(
      param1, param2, param3, param4, param5,
      param6, param7, param8, param9, param10));
    


  • Bashar:
    Du musst ja in Zeile 2 irgendwie bis nach rechts kommen. Bei mir drücke ich solange Tab bis ich eben dort bin. Wenn Du Tabs nicht magst, musst Du entweder die Leertaste gedrückt halten (was mir deutlich zu lange dauern) oder doch die Tab-Taste nutzen und eben auf Leerzeichen eingestellt haben. Oder es gibt eine weitere Funktion, die ich übersehen habe. 🙂



  • Beides gräßlich, immer das erste Beispiel.



  • So und nicht anders

    GetElements()
    	.push_back(
    		SomeObject
    			(
    				param1,
    					param2,
    						param3,
    							param4,
    								param5,
    								param6,
    							param7,
    						param8,
    					param9,
    				param10)
    			);
    


  • cooky:
    Ich finde es nicht so wie in Beispiel2 zu machen fast immer deutlich schlechter lesbar. Man muss sich erstmal die Klammern zurechtwurschteln, damit man weiß, welche Parameterliste wozu gehört... Das finde ich scheußlich, wenn man es mit ein paar Leerzeichen und Tabs einfacher lesbar machen kann.



  • Eisflamme schrieb:

    Bashar:
    Du musst ja in Zeile 2 irgendwie bis nach rechts kommen.

    Naja, ich mach das nicht so. Ich sage nur, dass ich es akzeptabel finde 🙂

    Bei mir drücke ich solange Tab bis ich eben dort bin.

    Würde ich in dem Fall auch so machen. Wenn es mir zu aufwendig wird, würde ich es aber so wie asc schreiben.



  • ascs Version finde ich gut, ja.



  • asc schrieb:

    GetElements().push_back(SomeObject(
      param1, param2, param3, param4, param5,
      param6, param7, param8, param9, param10));
    

    Ist für mich akzeptabel.
    Alternativ vielleicht noch

    //A
    GetElements().push_back(
      SomeObject(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10));
    
    //B
    GetElements().push_back(
      SomeObject(
        param1, param2, param3, param4, param5,
        param6, param7, param8, param9, param10));
    
    // oder eben gleich
    // C
    GetElements().push_back(SomeObject(param1, param2, param3, param4, param5, param6, param7, param8, param9, param10));
    

    Das einzig doofe ist, dass der Auto-Formatter von Visual Studio (B) nicht "kann" (es wird nur 1x eingerückt, die Parameter von SomeObject() werden nicht weiter eingerückt als "SomeObject(").



  • Eisflamme schrieb:

    Man muss sich erstmal die Klammern zurechtwurschteln

    Vielleicht solltest du einfach mal die Schriftgröße größer machen.. oder so. 😉 Ich habe da jedenfalls keine Probleme mit, und falls man mal eine Klammerorgie hat, macht man halt nach jedem Parameter einen Absatz.



  • Tabs durch Leerzeichen ersetzen zu lassen ist dumm und unpraktisch.



  • 314159265358979 schrieb:

    Tabs durch Leerzeichen ersetzen zu lassen ist dumm und unpraktisch.

    Ein echter Pi *einrahm*

    Ich muss zugeben, dass es bei mir sehr auf die Länge der parameterlister ankommt, was ich mache. Und ich rücke die () in dem Fall genau so ein wie ich {} einrücken würde.

    Das heißt:

    GetElements().push_back(
        SomeObject(
            param1, param2, param3, param4, param5, 
            param6, param7, param8, param9, param10
        )
    );
    

    Bei einer kürzeren Parameterliste könnte das dann aber auch so sein:

    GetElements().push_back(
        SomeObject(param1, param2, param3, param4, param5)
    );
    

    Das zweite sieht auch ganz hübsch aus, wenn man mehrere Parameter hat, die man so konstruiert und ist auch bei tieferer Klammerverschachtelung noch gut lesbar:

    GetElements().insert(
        std::make_pair(
            "id",
             SomeObject(param1, param2, param3, param4, param5)
        )
    );
    

    alles Geschmackssache 🙂


  • Mod

    314159265358979 schrieb:

    Tabs durch Leerzeichen ersetzen zu lassen ist dumm und unpraktisch.

    Quark, mal wieder, leider. Ich mag Forenbeiträge direkt aus meinem Lieblingseditor kopieren und möchte die nicht von Hand nachformatieren müssen.



  • Wie meinen? Das Forum ersetzt Tabs automatisch durch Leerzeichen. Und selbst wenn nicht, ist das eine ziemlich schwache Begründung.

    Ich sage dir, warum Tabs besser sind: Wenn mehrere Leute an Code arbeiten, kann sich jeder seine Wunsch-Tabbreite einstellen. cooky bevorzugt z.B. 4 Spaces, ich verwende 8.


Anmelden zum Antworten