Das Formatieren von Code ist eine schlechte Sache, wenn Sie ein VCS verwenden?

24

Ich formatiere meinen Code fast immer vor dem Festschreiben, um sicherzustellen, dass er ordnungsgemäß ausgeführt wird. Die meisten meiner Mitarbeiter kümmern sich nicht wirklich darum und formatieren ihren Code nicht immer richtig (kleinere Dinge, die den Code nicht beeinflussen, aber die Lesbarkeit beeinträchtigen, wenn sie versuchen, ihn zu pflegen).

Ich habe kürzlich die VS-Elektrowerkzeuge mit der Option "Beim Speichern formatieren" installiert und eine Änderung an einer Datei vorgenommen, die zuvor nicht formatiert wurde. Der Entwicklungs-Vizepräsident kam gerade zu mir und tadelte mich wegen der Formatierung, da sich im Zusammenführungs-Tool herausstellte, dass fast die gesamte Datei geändert wurde, anstatt nur eine oder zwei Zeilen (er kann also nicht genau sehen, was ich leicht geändert habe), und Ich soll das Format beim Speichern in der Zukunft deaktivieren. Obwohl ich diese Bedenken verstehe, finde ich es manchmal schwierig, den nicht formatierten Code zu sortieren, und IMO sollte er sowieso immer richtig formatiert sein. Beachten Sie, dass ich nicht nur Dinge aus einer Laune heraus neu formatiere, sondern beim Schreiben von Code entweder das Elektrowerkzeug verwende oder den Tastaturbefehl drücke, um den Text so zu formatieren, dass er leichter zu lesen ist. In SVN wird dies als angezeigt eine Modifikation.

Also frage ich mich, ist das Formatieren des Codes immer eine schlechte Sache? Sind seine Bedenken zutreffender als sicherzustellen, dass der Code lesbar ist?

Allan Wight
quelle
8
er hat recht, also warum nicht das ganze Team dazu bringen, das Tool zum Speichern beim Formatieren auch zu verwenden, dann erhalten Sie alle gut formatierten Code, der einfach zu lesen und Commit Diffs leicht anzuzeigen ist.
gbjbaanb
12
Die meisten guten Tools zum Vergleichen von Dateien haben einen Filter für "unwichtige Unterschiede" oder "Leerzeichen ignorieren". Einige, wie Beyond Compare, werden mit vorgefertigten sprachspezifischen Filtern ausgeliefert. Nutzen Sie es zu Ihrem Vorteil, wenn Sie es haben.
Michael K
7
Die Formatierung des Codes ist ebenso wichtig wie die vorgenommenen Änderungen. Lesbarkeit muss eine der höchsten Prioritäten sein, wenn Sie in einem Team sind. Ihr VP sollte das wissen und sich darüber Sorgen machen.
Edgar Gonzalez
@Edgar: +1. Der VP ist zu wählerisch. Lesbarkeit an erster Stelle ... und die Option zum Ignorieren von Leerzeichen bedeuten, dass dies keine große Sache ist. Und es bedeutet auch, dass es ein größeres Problem gibt, da es dem Rest des Teams egal ist. Der Vizepräsident sollte sich darüber mehr Gedanken machen.
quick_now

Antworten:

41

Zunächst muss Ihr Team eine Formatierungskonvention auswählen und diese einhalten. Sie müssen zu einer Einigung kommen und alle müssen sich daran halten, damit sich die Leute nicht streiten, wie die Dinge aussehen sollen. Dies sollte nicht nur etwas sein, das Sie alleine tun.

Wie für Ihre wirkliche Frage. Das Formatieren von Code ist keine schlechte Sache. Was schlecht ist, ist das Vornehmen größerer Formatierungsänderungen im selben Festschreiben wie Codeänderungen. Wenn sich Ihr Team darüber einig ist, wie die Dinge formatiert werden sollen, lassen Sie den Code einmal durchlaufen und formatieren Sie alles. Checken Sie das selbst ein. Die Festschreibungsmeldung macht deutlich, dass die Änderungen nur Leerzeichen sind und nicht funktionieren. Wenn Sie dann funktionale Änderungen vornehmen müssen, befinden sich diese in einem anderen Commit, damit sie klar erkennbar sind.

unholysampler
quelle
Es hilft immer noch nicht, wenn Sie Änderungen von mehreren Revisionen vor vergleichen möchten, aber es ist besser als Codeänderung + Formatänderungen in einem Zug. Diese Antwort gilt natürlich auch für das Refactoring.
gbjbaanb
1
+1: Zusätzlich ist es gut, etwas wie Stylecop oder ein anderes Tool zu verwenden, das den Stil automatisch formatiert und erzwingt. Synchronisieren Sie dann die Einstellungen zwischen allen Teammitgliedern, sodass die Formatierung für alle gleich ist und Sie sich nicht unbedingt an die "richtige" Formatierungsregel erinnern müssen.
Ryan Hayes
3
Wenn das OP wegen des Versuchs, ein Dokument zu formatieren, gerügt wurde, würde er mir irgendetwas nicht vorschlagen können, StyleCop zu verwenden.
Wayne Molina
3
@ gbjbaanb: Ja. Aus diesem Grund ist es am besten, solche Entscheidungen am Anfang zu treffen. In dem Projekt, in dem ich mich gerade befinde, wurden die Eclipse-Formatierungseinstellungen in das Repository eingecheckt, sodass wir wissen, dass alle dieselben Einstellungen haben.
Unholysampler
1
@quickly_now: Deshalb haben wir Manager mit Vetorechten. Wenn sich die Leute nicht einigen können, können sie eine Entscheidung treffen.
Unholysampler
29

Nein, Formatierungscode ist sehr wichtig . Commits sollten jedoch in zwei Gruppen durchgeführt werden:

  1. Kosmetische Änderungen - alles, was den Code lesbarer macht.
  2. Die anderen Änderungen - alles andere, was den Code betrifft.

Verwenden Sie die Festschreibungsmeldung, um anzuzeigen, dass nur Kosmetika geändert wurden. Diese können bei der Suche nach umfangreicheren Änderungen leicht übersprungen werden.

JK
quelle
3
Darüber hinaus empfiehlt es sich, eine bestimmte Formatierungskonvention zwischen Ihrem Team festzulegen. Formatieren Sie nicht einfach Code von anderen Personen, ohne dies zuerst zu diskutieren.
Steven Jeuris
Ja, aber weißt du, manchmal ist es so verlockend, dieses verdammte Durcheinander zu formatieren, "während du dabei bist". Der Versuch, kosmetische Änderungen von funktionellen Änderungen zu trennen, kann auch problematisch sein, wenn Sie VS verwenden und etwas automatisch formatieren. Oh, und niemand wird sagen, dass Sie eine blöde Formatierung durchführen, während Sie sehr wichtige Aufgaben haben, indem Sie sich den Commit-Verlauf
ansehen
10

Sie haben beide einen Punkt, aber Sie können beide bekommen, was Sie wollen. Formatieren Sie zuerst den Code und checken Sie nur diese Änderung ein. Nehmen Sie als Nächstes Ihre funktionalen Änderungen vor und überprüfen Sie dies als zweiten Schritt.

PeterAllenWebb
quelle
3
Ich denke, dies ist die beste Lösung für Ihre aktuelle Situation, aber Sie sollten mit Ihrem Team darüber sprechen. Sie haben jedoch ein größeres Problem, nämlich das Fehlen eines Kodierungsstandards.
Thomas Owens
2
Einverstanden. Ich frage mich, ob die Umgebung des OP einer dieser Cowboy-Orte ist, in denen Standards vermieden werden, um "Dinge schnell herauszubringen".
Wayne Molina
4

Ich bin auch ein Formatierer, also hier ein paar Tipps:

  • Erforderlicher erster Schritt: Lassen Sie das Team einige grundlegende Formatierungsstandards vereinbaren, z. B. Tabulatoren oder Leerzeichen, geschweifte Positionen, Kommentarstile usw. Jetzt werden Ihre Formatierungsänderungen nicht mehr alle überraschen, und Sie werden nicht mehr schrittweise vorgehen auf alle Zehen.

  • Bereinigen Sie die Formatierung nur um den Code, den Sie ändern. Wenn Sie nur an einer Funktion Änderungen vornehmen, bereinigen Sie diese Funktion. Zumindest im Laufe der Zeit werden Sie einen besser aussehenden Code haben.

  • Führen Sie größere Überarbeitungen der Formatierung als separate Festschreibung durch, ohne dass sich der Code ändert. Sie sollten dies nur dann tun, wenn Sie den Code nach der Änderung seltener mit dem Code vor der Änderung vergleichen möchten, da der Vergleich mit einem solchen Diff ärgerlich sein kann. Normalerweise mache ich Bereinigungen als erstes, bevor ich mich mit diesem Code beschäftige.

  • Holen Sie sich ein gutes Diff-Tool, mit dem Sie wichtige und unwichtige Änderungen sprachabhängig markieren können. Auch mein Lieblingsunterschied Beyond Compare kennzeichnet tatsächliche Codeänderungen in einer Farbe und Unterschiede zwischen Leerzeichen und Kommentaren in einer anderen.

für einen weiteren tipp editieren:

  • Es variiert von Sprache zu Sprache, aber für die meisten wirklich kosmetischen Änderungen am Code sollten Sie kompilierte Binärdateien vor und nach einer größeren Bereinigung vergleichen können, um absolut sicherzugehen, dass Sie nichts falsch gemacht haben.
John
quelle
Solange Sie keine VC-Tags in die Binärdatei (oder Build-Informationen) aufnehmen.
Vatine
2

Sie sollten den Code anderer nicht neu formatieren und Änderungen vornehmen, es sei denn:

  • Sie sind der Manager, der versucht, Team-Codierungsstandards festzulegen
  • Ihr Manager hat Sie gebeten, den Code zu bereinigen, um die Team-Codierungsstandards einzuhalten
  • Sie bereinigen den Code eines Entwicklers, der nicht mehr in Ihrem Team ist, um die Team-Codierungsstandards einzuhalten.

Sie werden in allen Fällen bemerken, dass ich mich auf Team-Codierungsstandards beziehe. Ich glaube fest an vernünftige, vereinbarte Kodierungsstandards für das Team. Wenn Sie sie haben, sollte der ursprüngliche Entwickler zurückgehen und seinen Code bereinigen, um die Teamstandards einzuhalten. Sie sollten dies nicht hinter ihrem Rücken tun. Wenn Sie keine Standards haben (und sollten), sollten Sie den Code eines anderen Teammitglieds nicht ändern, um sich an Ihre Philosophien zu halten, insbesondere nicht hinter deren Rücken. Denken Sie daran, dass Sie Teil eines Teams sind und dass Kodierungsstandards ebenso wichtig sind wie das Vertrauen und der Respekt zwischen den Teammitgliedern.

cdkMoose
quelle
"Hinter ihrem Rücken": Dies geht zurück auf die psychologischen Probleme des Code-Besitzes (oder des Krieges um den Entwicklungsrasen).
rwong
2
"Der Code anderer Leute" ist eine interessante Art, ihn auszudrücken. Ich arbeite an dem Produkt meines Unternehmens, zusammengestellt aus dem Code, den mein Unternehmen besitzt, an dem meine Teammitglieder und ich arbeiten. Es liegt in keiner Weise hinter ihrem Rücken, es während der Arbeit an den Standards zu fixieren. Ich stimme jedoch zu, dass die ideale Lösung darin besteht, den Originalentwickler dazu zu bringen, den Standard zu erreichen.
Caleb Huitt - cjhuitt
@Caleb: Wird hart, wenn sie sich gerade verweigern.
quick_now
Mit "Code anderer Leute" meine ich nicht Eigentum, sondern etwas, das sie geschrieben haben und das sie immer noch für die Unterstützung verantwortlich sind. Wenn ich in Ermangelung von Codierungsstandards eine Klasse mit 1.000 Codezeilen implementiere und Sie Änderungen an 2 Zeilen vornehmen, um ein bestimmtes Verhalten zu korrigieren und die gesamte Datei neu zu formatieren, bin ich sehr überrascht, wenn ich die Datei öffne. Als Mitglieder eines Teams sollten wir uns das nicht antun. Wenn Sie diese Datei mit einer vollständigen Neuformatierung einchecken und mir nicht einmal einen Hinweis geben, ist das nicht sehr teamfreundlich.
cdkMoose
In der ursprünglichen Diskussion von OP habe ich gelesen, dass dies eine Umgebung ohne Codierungsstandards ist (oder nicht gut durchgesetzt wird), deshalb habe ich als solche geantwortet. In dieser Umgebung sollte ein Entwickler anderen nicht seine Standards aufzwingen.
cdkMoose