Ein Entwickler schreibt if/else
Blöcke mit einzeiligen Code-Anweisungen wie:
if (condition)
// Do this one-line code
else
// Do this one-line code
Ein anderer verwendet geschweifte Klammern für alle:
if (condition)
{
// Do this one-line code
}
else
{
// Do this one-line code
}
Ein Entwickler instanziiert zuerst ein Objekt und verwendet es dann:
HelperClass helper = new HelperClass();
helper.DoSomething();
Ein anderer Entwickler instanziiert und verwendet das Objekt in einer Zeile:
new HelperClass().DoSomething();
Ein Entwickler ist mit Arrays und for
Schleifen einfacher :
string[] ordinals = new string[] {'First', 'Second', 'Third'};
for (i = 0; i < ordinals.Length; i++)
{
// Do something
}
Ein anderer schreibt:
List<string> ordinals = new List<string>() {'First', 'Second', 'Third'};
foreach (string ordinal in ordinals)
{
// Do something
}
Ich bin sicher, dass Sie wissen, wovon ich spreche. Ich nenne es Codierungsstil (weil ich nicht weiß, wie es heißt). Aber wie auch immer wir es nennen, ist es gut oder schlecht? Hat die Förderung eine höhere Produktivität der Entwickler zur Folge? Sollten wir Entwickler bitten, zu versuchen, Code so zu schreiben, wie wir es ihnen sagen, damit das gesamte System stilkonform wird?
project-management
productivity
coding-style
Saeed Neamati
quelle
quelle
var
anstelle des vollqualifizierten Typnamens.Antworten:
Ein Kodierungsstandarddokument ist nützlich. Es ist am nützlichsten, wenn es kurz genug ist, damit sich jeder ohne allzu viel Mühe an das Ganze erinnern kann und wenn es niemanden zu viel Schmerz verursacht.
Wie Sie sich entscheiden, Code in Ihre Organisation einzurücken, Namen in Großbuchstaben zu schreiben, Ihre Schleifen zu implementieren oder Ihren Code zu kommentieren, spielt keine Rolle. Der hilfreiche Teil besteht darin, alle dazu zu bringen, Code zu schreiben, der ungefähr so aussieht wie der Code aller anderen.
Auch hier spielt es keine Rolle, was die Standards sind, sondern eine Art einfacher, unkomplizierter Standard. Stellen Sie also alle Ihre Entwickler in einen Raum und lassen Sie sie darüber streiten, welche Standards gelten sollen. Dieses Treffen könnte auf unbestimmte Zeit stattfinden, daher gelten folgende Regeln:
Betrachten wir die Annahme jemand | sonst ist | Standards entweder als Ausgangspunkt für Ihre eigene Kodierungsstandards-Besprechung oder als Möglichkeit, die Besprechung vollständig zu vermeiden.
Sobald eine Einigung erzielt wurde, sollten Entwickler in der Lage sein (und von ihnen erwartet werden), sich selbst zu überwachen. Gelegentliche Abweichungen von der Norm sollten keine große Sache sein (und sind möglicherweise sogar zu rechtfertigen), jedoch sollte die unredliche Weigerung, einen bevorzugten persönlichen Stil zugunsten der Norm aufzugeben, zur sofortigen Verlegung in das Büro mit undichten Wasserleitungen oder was auch immer führen .
Demian Brecht zeigt auf fusselfreie Werkzeuge. Dies ist eine perfekte Ergänzung zu einem Kodierungsstandarddokument. Es ist nur gut Codierung zu halten Stil Standards; Es ist wichtig , sich an Kodierungsstandards zu halten, die sich auf gefährliche Praktiken beziehen. Niemand anderes als der Autor wird prüfen, ob jede Codezeile dem Standard für Stil entspricht, aber Sie sollten auf jeden Fall in Betracht ziehen, ein Flusentool in den Workflow Ihres Teams zu integrieren, um wahrscheinliche Fehler automatisch zu erkennen. Darüber hinaus kann das Tool selbst die akzeptierten Praktiken kodifizieren, sodass Sie sie nicht alle einzeln in den Kodierungsstandards auflisten müssen. Geben Sie einfach die Konfiguration des Tools an.
Hinweis: Die Idee der "Codierungsstandards" ist nicht nur auf die Programmierung beschränkt. "Kodierungsstandards" werden in vielen Bereichen verwendet, manchmal innerhalb einer Organisation, häufiger in einer ganzen Branche oder einem ganzen Beruf. Einige Beispiele:
In jedem Fall (und in vielen anderen Fällen) könnte ein kompetenter Praktiker leicht "Code" verstehen, der nicht dem erwarteten Standard entspricht. Warum schreiben so viele Branchen weiterhin detaillierte Anforderungen für Dokumente, die nicht einmal von einem Compiler analysiert werden müssen? Weil Stil zählt . Durch die Darstellung von Informationen in einem Standardstil kann sich der Leser vollständig auf den Inhalt konzentrieren, das Lesen beschleunigen, das Verständnis fördern und Fehler reduzieren.
quelle
Stil spielt keine Rolle.
Da habe ich es gesagt.
Nach 30 Jahren und Hunderten von Kundenstandorten und Code von (geschätzten) 500 (oder mehr) Teammitgliedern in diesen Jahren habe ich festgestellt, dass dieser Stil einfach keine Rolle spielt.
Bring es zuerst zum Laufen.
Holen Sie sich ein optimales Volumen an Ressourcen (dh die richtige Datenstruktur, den richtigen Algorithmus).
Fummel über "Stil", nachdem alles andere gelöst wurde. Viel "Stil" nur mit Werkzeugen, niemals manuell.
quelle
if (t) { x;y;}
anstattif (t) x;y;
(verwenden Sie immer '{}' nach if). Bevorzugen Sie konstanten korrekten Code (es ist sehr schwierig, konstante Korrektheit in den Code einzufügen, nachdem er geschrieben wurde. Verwenden Sie std :: cout / std :: cin nicht fprintf / scan, da erstere sehr viel wahrscheinlicher Fehler verursachen. Verwenden Sie Vektor statt Arrays (um ein Überlaufen zu verhindern)Es gibt Codierungsstile und es gibt Codierungsgerüche. Es war nicht einmal das ich gefunden habe:
Mein früherer Arbeitgeber hat es rigoros verboten, Mehrfachleitungen
if()
ohne Klammern zu verwenden. Es wurde als Fehler vom Typ "Mach es noch einmal und du bist gefeuert" gewertet. Die erlaubten Konstrukte warenDies ergab sich aus einem Fehler wie dem oben gezeigten, der einige Stunden dauerte, um die Hauptseite des Portals zum Stillstand zu bringen.
Es gibt Dinge, die Sie einfach immer tun sollten. Wie
switch()
:Währenddessen tippen Sie:
ohne ein
case
mit zu schließen//fallthrough
gilt als fehler.Im Allgemeinen gibt es den Kodierungsstandard, bei dem es sich um Richtlinien handelt, die für bestimmte Anforderungen ignoriert, kreativ interpretiert oder geändert werden können. Und es gibt den Abschnitt über "Gerüche" und es ist streng zu befolgen.
quelle
Erstellen Sie Konsistenz mit einem guten Upfront-Design. Was Sie in der Frage beschreiben, ist nichts weniger als Mikromanagement. Ich mache viel Webentwicklung. Deshalb bevorzuge ich RESTful- und CRUD-Entwicklung, die als Services bereitgestellt werden. Dies stellt einfache, gut definierte Entitäten sicher, die auf verschiedene Arten verwendet werden können.
Dieses Design ermöglicht es mir auch, Implementierungsdetails an andere Entwickler zu delegieren. Auf diese Weise füllen sie die Lücken aus, anstatt ein komplettes Systemdesign zu erstellen.
Das Fehlen eines Gesamtdesigns führt zu Inkonsistenzen im System. Die Kritik grundlegender Iterationen und Schleifenkonstrukte trägt wenig zur Verbesserung des Systemdesigns bei. Diese Probleme lassen sich besser mit StyleCop lösen.
Können Sie ein relativ einfaches Diagramm Ihres gesamten Systemaufbaus zeichnen? Ein Entwurf, der die Elemente / Entitäten beschreibt, die an einem neuen Teamentwickler beteiligt sind. Wenn Sie es nicht können oder wenn es sehr aufwendig ist, fehlt das Design.
quelle
IMHO kommt es darauf an ...
Ihre ersten beiden Beispiele sind für mich nicht nur eine Frage des persönlichen Geschmacks.
(ohne Klammern) = Fehleranfälliger, wenn später mehr Code hinzugefügt wird:
Und das ist weniger bequem zu debuggen:
Sie können einen Haltepunkt nicht einfach dort setzen, wo Sie ihn benötigen. Wenn dies einmalig ist - fair genug, aber wir diskutieren es als eine Frage des Stils, und sobald Sie solche Dinge überall haben, wird das Debuggen unangenehmer, als es sein muss.
Was Ihr drittes Beispiel betrifft (für vs foreach), sehe ich es jedoch als Geschmackssache an.
quelle
Weder. Ich würde strenge Codierungsregeln vermeiden, um nicht mühsam, wählerisch, mikromanagementorientiert und am schlimmsten zeitverschwendend zu sein. Ihr Gefühl der Autonomie ist Ihr eigenes Problem. Wenn ich möchte, dass Sie sich besser fühlen, kaufe ich Ihnen eine Runde Ihres Lieblingsgetränks. Ansonsten erledige etwas.
quelle
Die Verwendung von Konventionen, Variablennamen, Klassennamen usw. ist eine gute Praxis. Codierungsstile wie die von Ihnen bereitgestellten Beispiele sind jedoch eher trivial und wirken sich weder auf die Lesbarkeit noch auf die Effizienz des Codes aus. Auf der anderen Seite wird der Aufwand, der durch die Durchsetzung eines bestimmten Stils in Kombination mit den Bemühungen der Entwickler entsteht, Probleme verursachen.
quelle
Verwenden Sie ein branchenübliches Flusentool (anscheinend FxCop für C #). Obwohl dies nicht das A und O ist , ist Konsistenz bei großen Projekten wichtig, an denen mehrere Mitarbeiter arbeiten.
Wenn Sie nur an Ihrem eigenen Projekt oder einem kleinen Team arbeiten, würden viele behaupten, es sei übertrieben. Ich glaube anders (ich benutze PEP8 für Python, auch in meinen persönlichen Einzelentwicklerprojekten ).
Die meisten der von Ihnen genannten Beispiele würden jedoch höchstwahrscheinlich nicht von einem Flusenwerkzeug erfasst, da sie einfach keine Rolle spielen.
quelle
Die Durchsetzung eines einheitlichen Codierungsstils ist immer schwierig. Idealerweise sollte eine solche alltägliche Aufgabe einem Werkzeug überlassen werden. Ich begrüße die Go-Community dafür.
quelle
Es ist eine Mischung aus beidem. Nur weil es ein Standard ist, ist er nicht lesbar und wartbar. Wenn es noch keinen instillierten Standard gibt oder wenn fehlerhafte und unlesbare Aspekte vorhanden sind, ist eine Überarbeitung angebracht.
quelle
Letztendlich ist es der Programmierer, der die Programmierung vorantreibt. Es gibt Stilprobleme, die jedoch zweitrangig sind, wenn das Programm veröffentlicht wird.
Es ist hilfreich, Programmierern eine Anleitung zu geben. Dies kann / sollte erfolgen, bevor die Programmierer an die Arbeit gehen, insbesondere wenn sie relativ zum Umfeld oder zur Programmierung selbst Anfänger sind. Unter Anleitung sind einige Programmierer sehr stilbewusst, andere weniger. Die zu Beginn des Projekts gegebenen Anleitungen helfen der ersten Gruppe von Programmierern und erleichtern so die Gesamtaufgabe. Es könnte wenig für die zweite Gruppe tun, was (hoffentlich) an Kreativität wettmachen wird, was ihnen an Konformität fehlt.
quelle
Ich denke, es hängt von der Größe des Projekts ab und davon, wie viele Leute daran arbeiten. Ein erfahrener Programmierer kann sich beide verschiedenen Formatstile ansehen und wissen, was in beiden vor sich ging, aber es muss eine Konsultation geben, damit das Auge sie leicht erkennen kann. Wenn Sie Ihre einzeiligen if-Anweisungen ohne die geschweiften Klammern ausführen, sollte dieses Projekt sie nicht verwenden. Wer auch immer dieses Projekt leitet, sollte diese Wahl haben. Ich mag Dinge, die klar und auch sehr kompakt aussehen, wie ich sie bekommen kann. Wenn Sie eine einzelne Zeile machen, wenn statmeents sie besser so aussieht
Oder auch:
Aber eine einzelne Zeile sollte nicht den Abstand eines Mulitilins verwenden, wenn. Es ist nur so, wie ich Dinge tue. Es macht mir nichts aus, wie das Objekt aufgerufen wird, und das hängt davon ab, wie oft es aufgerufen wird. Wenn es ein paar mal aufgerufen wird, starte ich das Objekt lieber und hängt davon ab, ob es Konstruktoren hat und was nicht auch. Denn wenn Sie einen Konstruktor haben und aufrufen:
Anschließend haben Sie die Objektkonstruktormethode zweimal aufgerufen, wenn dies durch eine vollständige Instanzierung des Objekts vermieden werden konnte.
Wenn es um foreach und for-Schleifen geht Bei einigen lanauges geht es auch um die lanauge, damit Sie den Schlüssel und den Wert in temporären Arrays besser kontrollieren können, wenn Sie das Array in einer foreach-Schleife betrachten. Und ich weiß, dass einige Sprachen eine Art Optimierung haben, weil sie sich die Schleife ansehen können und genau wissen, wie oft sie aufgerufen wird.
quelle
Während Ihr erstes Beispiel nicht besonders gut ist (das Argument, dass es bei Modifikationen fehleranfälliger ist), habe ich mich im Allgemeinen zu etwas entwickelt Vorzug erhalten, dass Entwickler leicht unterschiedliche Codierungsstile verwenden.
Nach der Arbeit mit dem Code anderer Teammitglieder, manchmal erst nach ein paar Monaten, beginnt die Arbeit im Wesentlichen in einer Inline-Zeile
git blame
. Nachdem ich über 10 Jahre in meiner Firma gearbeitet habe, kann ich Ihnen wahrscheinlich mit einer Genauigkeit von über 80% sagen, wer eine bestimmte Klasse an einer beliebigen Stelle in unseren 500.000 Codezeilen geschrieben hat.Während es ein bisschen "Rampenzeit" gibt, wenn Sie anfangen, Code zu betrachten, der einen Stil verwendet, mit dem Sie nicht einverstanden sind, sagen Sie in dieser Zeit wirklich: "Oh, das sieht aus wie John Does Code (weil er benutzt Stil X, aber nicht Stil Y usw.) ". Und das bringt eine Menge Kontext mit sich. In erster Näherung wissen Sie, was Sie von Johns Code erwarten können - welche anderen Teile der Codebasis er gut versteht und welche Teile er nicht versteht, ob er ein SQL-Guru oder ein GUI-Neuling ist usw. usw.
Wenn Sie den Code aller Benutzer über einen Formatierer ausführen, werden diese Informationen im Wesentlichen entfernt und hinter einem ausgeblendet
git blame
, was Sie möglicherweise nicht tun.quelle
Dies hängt sehr stark von der Art der Organisation ab.
Wenn Sie eine kleine Gruppe von Superhelden sind, ist jede Art von Stil in Ordnung. Wenn jeder seinen eigenen Stil hat und sowohl gut als auch intern konsistent ist, dann ist das alles, was Sie brauchen. Die Superhelden werden sagen: "Jane hat Klammern, das ist es, was sie meint" oder "Jack benutzt camelCase für Variablen".
Universelle Standards sind in der Regel am besten geeignet, um jeden zum B + -Spieler zu machen. Deine Superhelden werden dadurch runtergezogen. Aber wenn Sie wollen, dass ein A-Spieler und ein halbes Dutzend B-Spieler und ein halbes Dutzend C-Spieler einen Durchschnitt von bis zu B + erreichen, dann wollen Sie einheitliche Standards. In diesem Fall soll jeder das Gleiche tun, damit der A-Spieler so schnell wie möglich durch den Code eines jeden gehen kann.
Viele von euch sagen: "Aber warte, warum nicht die B- und C-Spieler abschaffen?"
In Wirklichkeit gibt es nicht viele Superhelden. Während es sich lohnt, sie bei Google zu finden und zu pflegen, kann die Einführung eines neuen Abrechnungssystems für Ma Bell für das letztgenannte Team kostengünstiger sein. (Und wenn Sie wirklich Superhelden haben, sind 4 oder 5 doppelt so teuer wie ein Dutzend Junioren)
quelle