Wie streng sollten Sie bei Einrückungen / Leerzeichen sein? [geschlossen]


8

Unser Entwicklungsprozess ist wie folgt

Code die Aufgabe -> jemand anderes QAs Code und Dokumentation -> Aufgabe wird in Trunk zusammengeführt.

Kürzlich hat sich ein Kollege aufgrund von Problemen mit Einrückungen und Leerzeichen geweigert, die Code-Qualitätssicherung zu übergeben.

Hier sind Beispiele für diese Probleme (Syntax ist SAS):

Zusätzliches Leerzeichen:

        %if &syserr gt 0 %then %goto err; /*last line of code*/




/* Footer area*/

Zusätzliche weiße Leerzeile und nicht in der Proc-Sortierung eingerückt:

 /* End Of header * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */


    proc sort data = %dataset ;
    by id; 
    run;
    %if &syserr gt 0 %then %goto err; 

    proc sort data = &second_dataset.;
    by id;
    run; 
    %if &syserr gt 0 %then %goto err; 

Zusätzlicher Leerraum zwischen den Schritten:

        /*join all details on for each record*/
        proc sort data = &data out = data_srt ; 
              by &conditions; 
        run;
        %if &syserr gt 0 %then %goto err;

        proc sort data = &data2.;
              by &conditions.;
        run; 
        %if &syserr gt 0 %then %goto err; 




        /*cartesian join*/
        data new_data;
              join data 
                          &data2.  ;
              by &conditions; 

        run;

Die Frage ist, ein guter Programmierer zu sein, Ihren Code zu überprüfen und all diese Dinge zu korrigieren, ist das Richtige, oder ist das einfach lächerlich?

Es gibt eine zusätzliche Komplikation: Da wir keine kontinuierliche Integration oder automatisierte Tests haben, ist es dem QAer nicht möglich, diese Probleme schnell zu beheben und den Code festzuschreiben, da das Risiko besteht, dass Semikolon oder ähnliches versehentlich gelöscht wird. (Um fair zu sein, besteht das Risiko für den Erstentwickler, der diese Änderungen vornimmt. Wenn dieser Fehler auftritt, muss er nur behoben und fortgesetzt werden.)


1
Ich kenne SAS nicht, aber zusätzliches Leerzeichen ist ziemlich anal. Einrückung scheint mir ein fairer Punkt zu sein.
Erik Reppen

@ErikReppen Andererseits haben diese Beispiele 4 Leerzeilen zwischen Codesegmenten. Das ist etwas übertrieben ...
Izkata

Antworten:


16

Ja, das ist die richtige Antwort. Der Einrückungsstil sollte für den gesamten Code konsistent sein.

Ein großer Teil des Wertes einer konsistenten Einrückung besteht darin, dass sie konsistent ist. Auf diese Weise lernen die Leute, es leicht zu lesen, was alle beschleunigt.

Meine Faustregel lautet, dass jeder Einrückungsstil, den das Team wünscht, gut ist, solange er mechanisch angewendet werden kann. Wenn Sie es mechanisch anwenden, müssen Sie weder die Details des Standards kennen noch Zeit mit dem Leerzeichen verbringen.

Die mechanische Formatierung wird auch zu einer weiteren Möglichkeit, Fehler hervorzuheben. Wenn Sie der Meinung sind, dass Sie Code in einen Block eingeschlossen haben, wird das Formatierungswerkzeug den Einzug aufheben und es ist offensichtlich, dass Sie Fehler gemacht haben. Dies erleichtert auch das Refactoring. Auf der trivialen Ebene entfernt Autoformat beim Extrahieren eines Codeblocks in eine Funktion die zusätzliche Einrückung.

Autoformat bedeutet auch, dass Sie, wenn Sie wirklich, wirklich nicht mit dem Standard leben können, den alle anderen verwenden, den Code so formatieren können, wie Sie ihn möchten, und ihn dann vor dem Einchecken neu formatieren können. Da Sie einen Überprüfungsschritt haben, würden Sie dies offensichtlich tun Tun Sie dies vor der Überprüfung, und wenn Sie dies nicht tun, wird es dann abgeholt.

Der GNU-Einzug ist ein Werkzeug, mit dem fast alles automatisch formatiert werden kann. Ich habe eine schnelle Suche durchgeführt und es scheint Tools zu geben , mit denen SAS-Code automatisch formatiert werden kann, aber die SAS-Tools erledigen das nicht für Sie.


6
+1 für die Verwendung des Werkzeugs. Es ist irgendwie lächerlich, es von Hand zu reparieren, wenn Sie nur ein Tool im Commit-Hook ausführen können.
imel96

1
@ imel96 Manchmal gibt es absichtliche Leerzeichen, um die Lesbarkeit zu verbessern, die ein automatisches Werkzeug vermasselt. Es sollte also optional sein, etwas, das Sie auslösen können, wenn Sie es möchten, und nicht bei jedem Commit erzwungen werden.
Izkata

@Izkata: Ich habe noch kein Formatierungswerkzeug gefunden, das keinen Code enthält, den Sie verwenden können, um dieses Bit nicht zu formatieren. Aber ich bin auch schon ziemlich lange weg, seit ich das letzte Mal die automatische Formatierung deaktivieren wollte. Ich gebe zu, gelegentlich etwas seltsame Codekonstrukte zu verwenden, um das gewünschte Format zu erhalten (mehrzeilige Bedingungen mit "if true" und "in der ersten Zeile"). Aber die mehrzeilige Bedingung ist ein Code-Geruch für sich, daher ist es IMO fair genug, ein wenig hinzuzufügen, um ihn weniger unlesbar zu machen.
Móż

@Izkata, das Problem bei der Optionierung des Tools besteht darin, dass, sobald sich eine Person für eine Datei entscheidet, niemand mehr das Tool für diese Datei erneut ausführen kann, da sonst der Code "Diese Datei nicht formatieren" beschädigt wird. Das heißt, sie sollten diese Datei zu Recht zu Ihnen streichen und "Formatierung korrigieren" sagen. Jedes Mal, wenn es geändert wird. Also nein, optional funktioniert nicht. Sie müssen die Codes ohne Format um Ihre speziellen Code- / Kommentarblöcke verwenden.
Móż

@ Ӎσᶎ Sie korrigieren also die Einrückung, die tatsächlich schlecht ist. Führen Sie es nicht blind über die gesamte Datei aus. Mit vim können Sie beispielsweise einen Teil der Datei auswählen und diesen automatisch erneut einrücken, wobei der Rest der Datei ignoriert wird.
Izkata

5

Dies ist absolut richtig. Einer der größten Teile der Codequalität ist die Lesbarkeit. Wenn Sie Ihren Code nicht richtig eingerückt haben und überall zufällige Leerzeichen haben, wird die Lesbarkeit des Codes verringert.

Im Allgemeinen sollte Ihr Entwicklungsteam bei Einrückungen und Leerzeichen dieselben Codequalitätsstandards einhalten. Wenn andere Module in Ihrer Codebasis keine zusätzlichen Leerzeichen zwischen den Schritten einfügen, sollte dies auch nicht der Fall sein (es sei denn, dies verbessert natürlich die Lesbarkeit).

Ich bin kein SAS-Programmierer, aber wenn ich Code überprüfe und das Einrücken völlig aus dem Ruder läuft und es nicht ordentlich aussieht, kommentiere ich es auf jeden Fall zur Nachverfolgung und wenn es wirklich schlecht ist, scheitere ich die Überprüfung nicht.


3

Wie Onkel Bob in seinem Buch sagt , ist die Formatierung (sogar Leerzeichen) unglaublich wichtig. Software wird in der Regel viel häufiger gelesen als geschrieben. Daher müssen wir sie sauber und einfach zu lesen machen. Es ist eine Kommunikationsmethode.

Wenn Sie in einem Team arbeiten, legen Sie im Idealfall einen Standard fest, den jeder befolgt. Richten Sie im Idealfall ein Tool ein, das die Aufgabe für Sie erledigt, anstatt den Standard in einzelnen Codeüberprüfungen zu übernehmen. (Ich bin mir nicht sicher, welches Tool für Ihren Fall geeignet ist. So etwas wie Checkstyle für Java oder StyleCop für C #).

Also würde ich mit Ihrem Kollegen chatten und sehen, ob Sie keine Richtlinien für Leerzeichen finden können. Es lohnt sich, sich ein paar Minuten Zeit zu nehmen, um Ihren Code zu bereinigen, wenn dadurch die Dinge auf der ganzen Linie konsistent werden.


2

Nach einer Erfahrung vor vielen Jahren beim Lesen eines F-16C / D-Codes, bei dem die Einrückung gebrochen wurde, muss ich sagen, dass es von entscheidender Bedeutung ist, die Einrückung korrekt zu machen.

Es ist so wichtig, dass es nicht von Hand gemacht und nicht von Hand repariert werden sollte. Dafür sind Computer da.

Sie erstellen Computerprogramme, die den Quellcode automatisch neu formatieren können, um ihn dem bevorzugten Stil Ihres Unternehmens anzupassen. Schließen Sie einen von ihnen an Ihr Quellcodeverwaltungssystem an, damit der Code beim Einchecken automatisch in Übereinstimmung gebracht wird.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.