Programmierstil?



  • !rr!rr_. schrieb:

    was ist daran denn verkehrt?

    int main(){
        int a = 3, b = 5;
        for( int i = 0; i < b; i++ ){
            if(a--)
                break;
            else{
                a++;
                b--; }}
        return 0; }
    

    die Einrückung läßt doch keinen Zweifel am Verlauf des Programmflusses, und außerdem wird kein Platz für Leerzeilen verschwendet, die nur aus { oder } bestehen.

    Ha, ich wusste doch, dass mir noch was dazu einfällt. Mein Argument mit dem Nicht-Erkennen von Blöcken fällt weg, weil man mit 4 Leerzeichen pro Tab auch so die Einrückungen erkennt.

    Problematisch sind zwei Dinge (schon angesprochen z.T.):
    - Man kann sich selbst mit den {} verwurschteln
    - Damit zusammenhängend könnten einem die Einrückungen eine Logik vorgaukeln, die den {} nicht entspricht

    int main(){
        for(std::size_t n = 0; n < 100; ++n){
            for(std::size_t m = 0; m < 100; ++m){
                std::cout << someGlobalMatrix[n][m] << ' ';
            std::cout << '\n';}} // Ups, falsch eingerückt
        std::cout << "Jetzt... Jetzt ist aus...\n";
    }
    

    Wenn man dem Codeautor nicht traut oder Bugs vermutet, hat man also ein Problem. Dann muss man unabhängig von den Einrückungen alle Klammern überprüfen und dann hat man wirklich Spaß. Bei dieser Variante kann das nicht passieren:

    int main()
    {
        for(std::size_t n = 0; n < 100; ++n)
        {
            for(std::size_t m = 0; m < 100; ++m)
            {
                std::cout << someGlobalMatrix[n][m] << ' ';
                std::cout << '\n'; // Hoppla
            }
         }
    }
    


  • Eisflamme schrieb:

    - Damit zusammenhängend könnten einem die Einrückungen eine Logik vorgaukeln, die den {} nicht entspricht

    Wird mehr und mehr unwahrscheinlich, weil die IDE einrückt.

    Aber wenn ich } auf der selben Zeile hinter die Befehle hänge, kann ich die nicht mehr im Code mit wenigen Tastendrücken umsortieren. Das mache ich aber sehr oft.



  • Wenn Du den Code umkonvertierst, zählt für die hier vorgestellte Form natürlich die Ergebnisform. Denn ich denke nicht, dass jemand int main(){ vorstellt, wenn er nachher auf den Umkonvertierknopf drückt.



  • Eisflamme schrieb:

    Wenn Du den Code umkonvertierst, zählt für die hier vorgestellte Form natürlich die Ergebnisform. Denn ich denke nicht, dass jemand int main(){ vorstellt, wenn er nachher auf den Umkonvertierknopf drückt.

    War das auf volkard bezogen? Wenn ja: Wie? 😕



  • Ich meinte Umsortieren im Sinne von per Hand Zeilen vertauschen. Also
    [Pos1] //zu Zeilenanfang springen
    [Shift]+[CrsDown] //Zeile markieren //Hier würde } arg stören
    [Shift]+[Del] //Zeile Zwischenablage kopieren und aus Code entfernen
    n-mal{[CrsDown]} //hinspringen, wo sie landen soll
    [Shift]+[Ins] //Zeile in den Code reinkopieren



  • volkard schrieb:

    Ich meinte Umsortieren im Sinne von per Hand Zeilen vertauschen. Also
    [Pos1] //zu Zeilenanfang springen
    [Shift]+[CrsDown] //Zeile markieren //Hier würde } arg stören
    [Shift]+[Del] //Zeile Zwischenablage kopieren und aus Code entfernen
    n-mal{[CrsDown]} //hinspringen, wo sie landen soll
    [Shift]+[Ins] //Zeile in den Code reinkopieren

    Wow, viele Arbeitsschritte für sowas.
    Wenn du Visual Studio nutzt, dann mach's so:
    Strg + l (kleines L)
    [zu Zeile navigieren]
    Strg + v



  • Das l ist zu weit weg. Die rechte Hand ist ja noch auf den Cursortasten vom Ansteuern der Zeile, weißt Du. Und meine Kombinationen gehen überall, sogar unter Linux. Geht schon recht fix.
    [Strg]+[v] ist viel schlimmer als [Shift]+[Ins], schon wieder die rechte rechte Hand.



  • volkard schrieb:

    Das l ist zu weit weg. Die rechte Hand ist ja noch auf den Cursortasten vom Ansteuern der Zeile, weißt Du. Und meine Kombinationen gehen überall, sogar unter Linux. Geht schon recht fix.
    [Strg]+[v] ist viel schlimmer als [Shift]+[Ins], schon wieder die rechte rechte Hand.

    Du hast entweder kleine Händer oder Wurstfinger, aber Strg+v krieg ich problemlos mit kleinem Finger auf Strg und Zeigefinger auf v gedrückt 😃 Wenn ich mich strecke, komm ich sogar an's l ran 😉
    Übrigens gibt es sowohl in vi als auch in emacs (wenn wir von Linux reden) effizientere Tastenkombos, um auszuschneiden, sich zu bewegen und wieder einzufügen. Da hat man dann eh meistens beide Hände auf den Buchstabentasten.

    Aber du legst den Fokus wohl eher auf die rechte Hand und ich auf die linke.



  • GPC schrieb:

    Du hast entweder kleine Händer oder Wurstfinger, aber Strg+v krieg ich problemlos mit kleinem Finger auf Strg und Zeigefinger auf v gedrückt 😃 Wenn ich mich strecke, komm ich sogar an's l ran 😉

    Ctrl+L mit kleiner Finger + Zeigefinger? Was hast du denn für Hände? 😮
    Ich schaff das nur mit kleiner Finger + Daumen. Tut's aber auch 🙂



  • volkard:
    Trotzdem verstehe ich nicht, wie das mehr und mehr unwichtig wird. Wenn die IDE automatisch einrückt, wird der Stil mit { am Ende der Zeile ja quasi "nicht mehr unterstützt". Das macht ihn ja trotzdem nicht besser. Oder war deine Aussage, dass dieser Stil automatisch von der IDE auf dauer ausgerottet wird?



  • Die Sache ist doch so: wenn du fremden Code debugst(oder der Einrückung eines anderen programmeirers nicht traust), dann drückst du einmal die magische Tastenkombination deiner IDE und alles ist korrekt eingerückt. Dann gibt sich dein Problem gar nicht. Genauso wie man sich als progrmamier angewöhnen kann, vorm Schließen einer editierten Datei einmal die magische Tastenkombination zu benutzen. dann tritt sowas auch nicht mehr auf.



  • hustbaer schrieb:

    GPC schrieb:

    Du hast entweder kleine Händer oder Wurstfinger, aber Strg+v krieg ich problemlos mit kleinem Finger auf Strg und Zeigefinger auf v gedrückt 😃 Wenn ich mich strecke, komm ich sogar an's l ran 😉

    Ctrl+L mit kleiner Finger + Zeigefinger? Was hast du denn für Hände? 😮

    Hab lange, schlanke Finger und meine linke Hand ist zudem auf Spreizung trainiert, da es auch die Greifhand beim Gitarrenspielen ist 😃
    Aber ich würde die Spreizung jetzt auch über einen Tag nicht 1x pro Minute machen wollen 😉

    Eisflamme schrieb:

    Wenn die IDE automatisch einrückt, wird der Stil mit { am Ende der Zeile ja quasi "nicht mehr unterstützt".

    Kann man doch einstellen wie man will. Ich habe die { Klammer auch nicht auf einer extra Zeile. Und wie otze sagte, drück ich bei fremdem Code einmal Strg+K, Strg+D und dann ist es so formatiert, wie ich's gerne habe 🙂 VS ftw!



  • Interessant, den kannte ich noch nicht.



  • Eisflamme schrieb:

    volkard:
    Trotzdem verstehe ich nicht, wie das mehr und mehr unwichtig wird.

    Wenn die IDE automatisch einrückt, muß man nicht mehr selber so stark auf's Einrücken achten. Man muß die Klammern nicht so setzen, daß einem Einrückfehler ins Auge fallen. Schlimmstenfalls wird man mißtrauisch und drückt schnell [Ctrl]+[A] [Alt]+[F8] (natürlich nicht Strg+K, Strg+D).

    Eisflamme schrieb:

    Wenn die IDE automatisch einrückt, wird der Stil mit { am Ende der Zeile ja quasi "nicht mehr unterstützt".

    Mein CodeBlocks rückt zur Zeit so ein:

    int main() {
    	for(std::size_t n = 0; n < 100; ++n) {
    		for(std::size_t m = 0; m < 100; ++m) {
    			std::cout << someGlobalMatrix[n][m] << ' ';
    			std::cout << '\n'; // Hoppla
    		}
    	}
    }
    

    (Muß mal den Knopf suchen, wo ich die nutzlosen Leerzeichen abschalten kann.)

    Eisflamme schrieb:

    Das macht ihn ja trotzdem nicht besser. Oder war deine Aussage, dass dieser Stil automatisch von der IDE auf dauer ausgerottet wird?

    Nö. Wenn ich mich recht erinnere, läßt MSVC beide Stile zu. Es rückt nur ein, schubst aber keine Klammern in eigene Zeilen oder klebt sie an Vorgängerzeilen.



  • volkard schrieb:

    Eisflamme schrieb:

    Das macht ihn ja trotzdem nicht besser. Oder war deine Aussage, dass dieser Stil automatisch von der IDE auf dauer ausgerottet wird?

    Nö. Wenn ich mich recht erinnere, läßt MSVC beide Stile zu. Es rückt nur ein, schubst aber keine Klammern in eigene Zeilen oder klebt sie an Vorgängerzeilen.

    Man kann es so einstellen, dass es die Klammern in eigene Zeilen schubst, an Vorgängerzeilen klebt oder die Klammern in Ruhe lässt.



  • Für C# kann bei bei der Formatierung jeden Pups einstellen 😃

    Für Zeile ausschneiden nehm ich immer SHIFT+ENTF - komm ich schneller ran, da die rechte Hand in dieser Situation eh auf den Pfeiltasten ist, ist der Zeigefinger schnell auf ENTF ein stück hoch gerutscht als wenn ich noch das l suchen muss 😃

    PS. mit ALT+Pfeiltasten kann man die Aktuelle Zeile mit der darunter oder darüber tauschen (Cursor wandert mit) so kann man auch schnell Zeilen verschieben.
    Kann aber sein das dass mit den Produtivity Power Tools rein gekommen ist (Mit diesem Add-on ist das Arbeiten ein Traum, so viele geile Features :))



  • David W schrieb:

    PS. mit ALT+Pfeiltasten kann man die Aktuelle Zeile mit der darunter oder darüber tauschen (Cursor wandert mit) so kann man auch schnell Zeilen verschieben.

    Supi Idee! Das will ich auch haben.



  • GPC schrieb:

    volkard schrieb:

    Eisflamme schrieb:

    Das macht ihn ja trotzdem nicht besser. Oder war deine Aussage, dass dieser Stil automatisch von der IDE auf dauer ausgerottet wird?

    Nö. Wenn ich mich recht erinnere, läßt MSVC beide Stile zu. Es rückt nur ein, schubst aber keine Klammern in eigene Zeilen oder klebt sie an Vorgängerzeilen.

    Man kann es so einstellen, dass es die Klammern in eigene Zeilen schubst, an Vorgängerzeilen klebt oder die Klammern in Ruhe lässt.

    Dumme Frage: Wo (VS 2008)?



  • volkard schrieb:

    David W schrieb:

    PS. mit ALT+Pfeiltasten kann man die Aktuelle Zeile mit der darunter oder darüber tauschen (Cursor wandert mit) so kann man auch schnell Zeilen verschieben.

    Supi Idee! Das will ich auch haben.

    http://visualstudiogallery.msdn.microsoft.com/d0d33361-18e2-46c0-8ff2-4adea1e34fef/
    "Move Line Up/Down Commands"



  • GPC schrieb:

    ... Übrigens gibt es sowohl in vi als auch in emacs (wenn wir von Linux reden) effizientere Tastenkombos, um auszuschneiden, sich zu bewegen und wieder einzufügen...

    Ja, aber vielleicht sind sie gleichzeitig auch deren Nachteil - man denkt nicht mehr über den Code nach - merke ich bei mir ab und zu. Die Kommandos lassen sich automatisieren und so habe ich plötzlich aus einer Header-Datei 200 Definitionen kopiert und daraus, ohne großartig nachzudenken, ein switch mit 200 cases halbautomatisch generiert, natürlich alle nach meinem Lieblingsstil. D.h. aus diesem Code:

    #define SOME_DEFINITION_0    0x1234u
    #define SOME_DEFINITION_1    0xAAAAu
    #define SOME_DEFINITION_2    0xDEAEu
    ...
    #define SOME_DEFINITION_200  0xDEADu
    

    hat man sich bequem so was hier generiert:

    switch (value)
        {
            case SOME_DEIFINITION_0:
                {
                    break;
                }
                /* ab hier etwa 200 weitere cases halb automatisch mit meinem Lieblingseditor generiert */
            default:
                {
                    break;
                }   
        }
    

    Wer will so was noch freiwillig warten...


Anmelden zum Antworten