Ich arbeite mit jemandem zusammen, der jedes Mal, wenn er eine Funktion aufruft, die Argumente in eine neue Zeile einfügt, z
aFunction(
byte1,
short1,
int1,
int2,
int3,
int4,
int5
) ;
Ich finde das sehr ärgerlich, da der Code nicht sehr kompakt ist, also muss ich mehr nach oben und unten scannen, um die Logik überhaupt zu verstehen. Mich interessiert, ob dies tatsächlich eine schlechte Praxis ist, und wenn ja, wie kann ich sie davon überzeugen, es nicht zu tun?
coding-style
Daniel Ball
quelle
quelle
Antworten:
Es ist nur eine Codierungsrichtlinie, die Sie mögen oder nicht mögen. Wichtig ist, dass Sie und Ihre Kollegen zustimmen, es zu verwenden oder nicht.
Die beste Möglichkeit, die Lesbarkeit zu verbessern, besteht offensichtlich darin, die Anzahl der Argumente zu begrenzen.
quelle
Es ist eine Frage der Präferenz. Bei komplizierten Funktionsaufrufen, bei denen Sie jeden Parameter dokumentieren möchten oder bei denen die Variablen ziemlich lang sind und viele davon vorhanden sind, kann dies hilfreich sein.
Beispielsweise:
Bei Sprachen, die benannte Parameter zulassen, ist dies häufiger der Fall, wenn Sie die Parameternamen verwenden (Beispiel in PL / SQL):
Aber ich stimme Ihnen zu, dass, wenn der Funktionsaufruf einfach ist und nicht zu viele Parameter, dies ärgerlich werden kann, wie zum Beispiel:
Ich finde es viel leichter zu lesen als
Für @ammoQ:
quelle
do_complex_op(new paramStruct { StartingState = 0, XCoord = xcoord })
, dann wird esIMO ist alles, was ungewöhnlich ist, eine schlechte Übung, es sei denn, es ist besser als der übliche Stil. „Geschmackssache“ ist eine schlechte Entschuldigung für das Schreiben von Code, der für die meisten Programmierer schwerer zu lesen ist als nötig, da eine arme Seele, die nicht an diesen Stil gewöhnt ist, diesen Code eines Tages pflegen muss.
Zeigen Sie die Quelle von Beispielen in MSDN oder ähnlichen Sites, große Open-Source-Codebasen usw., um zu beweisen, dass dies relativ einfach ist. Zeigen Sie die Ausgabe von Code-Verschönerern. Zeigen Sie am Ende, wie es jeder in Ihrem Team macht. Akzeptiere keinen schlechten Stil, nur weil jemand zu stur ist.
quelle
Nun, hier ist ein Downvote-Köder. Ich bin nie beschuldigt worden, das Populäre getan zu haben. Wenn Dinge in eine Zeile passen, passen sie natürlich in eine Zeile.
Aber mein Hauptanliegen ist nicht, ob der Code "hässlich" oder "hübsch" ist. Mein Hauptanliegen ist, wie einfach es ist, Änderungen zu verstehen und vorzunehmen, ohne Fehler zu machen.
Wenn die Argumente lang sind und es viele gibt, warum sie nicht in separate Zeilen setzen? Meiner Meinung nach ist es dadurch einfacher zu erkennen, was sie sind, und sie bei Bedarf zu ändern. Außerdem kann ich jedem Argument einen Kommentar hinzufügen, wenn ich möchte.
Ich möchte auch die Möglichkeit eines Fehlers minimieren, wenn ich einer Funktion ein Argument hinzufüge oder daraus entferne. Dies ist am Ende einer Argumentliste wahrscheinlicher als am Anfang. Aus diesem Grund ziehe ich es vor, das Komma (,) am Anfang einer Zeile und nicht am Ende einzufügen. Wenn ich dann zum Beispiel ein Argument am Ende der Liste entfernen oder hinzufügen möchte, handelt es sich um eine einzeilige Bearbeitung. Ich muss nicht mit dem Komma fummeln, das am Ende aller Zeilen stehen muss, sondern mit dem letzten, wo das letzte mit einer Klammer enden muss.
Also (Junge, ich werde dafür geflammt) schreibe ich es so:
Wenn es eine Funktion mit fünf bis zwanzig Argumenten gibt, ist die Funktion nicht auf einmal so gekommen. Es wuchs mit der Zeit, was bedeutete, dass es viele Änderungen gab. Jede nicht abgeschlossene Bearbeitung ist ein Syntaxfehler oder ein Fehler. Ich behaupte also nicht, dass das hübsch ist. Ich behaupte, es hilft, die Änderungen richtig zu machen.
(Und für diejenigen, die sagen, ich sollte stattdessen eine Struktur übergeben, ist alles, was das Problem verdrängt, da Sie eine Reihe von Codezeilen benötigen, um die Struktur auszufüllen, und nicht den zusätzlichen Code, um sie zu deklarieren und zuzuweisen.)
quelle
Ich würde es auch nicht nennen. Die beste Vorgehensweise, bei der ich bisher gearbeitet habe, bestand darin, Funktionsaufrufe nur in einer Zeile zu haben, es sei denn, Sie müssten einen größeren Betrag horizontal scrollen, um den gesamten Anruf zu sehen. Es ist ein Urteilsspruch, aber ich würde definitiv sagen, dass es nicht in Einklang steht, alle Funktionen wie diese einzusetzen, es sei denn, dies ist der von Ihrer Organisation festgelegte Standard.
Aus diesem Grund empfiehlt es sich, dass eine Organisation eine Reihe von Leitfäden erstellt, an die sich alle Programmierer halten sollten. Es dreht sich alles um Konsistenz und Lesbarkeit.
quelle
Es macht es einfacher:
quelle
Ich würde sagen, dass Funktionsaufrufe alle in einer Zeile sein sollten, es sei denn, sie überschreiten Ihre Standardcodebreite erheblich (häufig 80 Zeichen, häufig ein Grund für Argumente :-).
Ich sehe keinen Vorteil für diesen Stil. Es sieht subjektiv hässlich aus, und ich finde es ein Schmerz, wenn ich Code suche. Zum Beispiel möchten Sie vielleicht schnell suchen und sehen, ob die Funktion jemals mit einem bestimmten Parameter aufgerufen wird, der als NULL übergeben wird. Dies ist visuell einfach, wenn sich alle Parameter in einer Zeile befinden, und schwieriger, wenn sie auf diese Weise aufgeteilt werden.
quelle
Ich habe diesen Stil oft auf Funktion gesehen Erklärungen oder Definitionen , aber nie auf einen Anruf (bis jetzt). Da macht es manchmal Sinn, einen Kommentar für einzelne Parameter übersichtlicher hinzuzufügen. Es scheint, als hätte er diesen Stil auf Calls kopiert, ohne die zugrunde liegenden Gründe zu kennen. Sie haben ein gutes Argument dagegen und er scheint kein gutes dafür zu haben, also haben Sie meine Stimme, aber ich bin nicht derjenige, den Sie überzeugen müssen.
quelle
Verstößt es gegen die Kodierungsstandards des Unternehmens?
Wenn nicht, dann leiten Sie eine Diskussion über die Standards ein und darüber, welche Änderungen die Leute gerne sehen würden. Stellen Sie sicher, dass Sie dies als eines der Dinge ansprechen, die Sie ändern möchten.
Besprechen Sie ausführlich, warum Sie Sie dies nicht für nützlich halten, und gewinnen Sie hoffentlich den Tag. Sie werden nie erfahren, dass Ihr Kollege Sie davon überzeugen könnte, dass sein Weg der beste ist;)
Sobald Sie einen aktualisierten Standard erhalten haben, ist dokumentiert, worauf jeder Codieren sollte. Wenn Ihr Kollege dies weiterhin tut, können Sie ihn in seinen Codereviews ansprechen.
quelle
Es mag für Sie funky aussehen, aber es erleichtert die Arbeit an Code. Während des Refactorings können Sie sehr einfach einzelne Argumente auskommentieren und Ihren Refactor überprüfen, bevor Sie Dinge tatsächlich löschen. Sie können Typen auch ganz einfach auskommentieren und temporär ersetzen.
Es ist auch einfacher zu lesen als:
Ich bin nicht so extrem geworden, wie Sie es gezeigt haben (da es keine Namen für die Parameter gibt, ist es nicht sehr nützlich), aber ich habe mir angewöhnt, jeden Parameter in einer eigenen Zeile aufzuteilen oder überhaupt nicht aufzuteilen.
Der wichtige Teil ist, dass Ihr Code auf Standard-80-Farben-Displays gedruckt oder angezeigt werden kann und dennoch lesbar ist.
quelle
Sie werden selten eine ehrliche Antwort von einem Programmierer für so etwas bekommen. Jeder antwortet nur mit dem, was er will oder nicht. Die Wahrheit ist, dass die einzige "schlechte Praxis", mit der wir alle manchmal zu kämpfen haben, Ihre eigene Inflexibilität ist.
Sie müssen brutal ehrlich zu sich selbst sein, um zwischen Dingen, die eigentlich schlecht sind, und Dingen, die Sie nur nerven, unterscheiden zu können. Die Wahrheit ist, dass Sie in C / C ++ und ähnlichen Sprachen selten eine Einrückungsmethode finden, die sich spürbar auf die Verständlichkeit des Codes auswirkt. Die meisten Diskussionen über diese Art von Dingen haben nur beide Seiten mit Leuten gestapelt, die lächerliche, unaufrichtige Argumente vorbringen, um zu versuchen, ihre eigene persönliche Präferenz zu rechtfertigen.
Was meiner Lektüre nach genau das ist, was Sie in dieser Frage fordern: ein lächerliches, unaufrichtiges Argument, um Ihre persönliche Präferenz zu rechtfertigen.
quelle
Um ehrlich zu sein, hängt es von der Person ab. Ich würde für komplexe Funktionen sagen, wie durch das erste Beispiel von FrustratedWithForms demonstriert, dann ja; ansonsten ein großes NEIN. Andererseits bevorzuge ich es deshalb, die IDE-Funktionalität von Code willkürlich anzuwenden.
quelle
"Ich bin gespannt, ob das wirklich eine schlechte Praxis ist ..."
Ja, es ist eine schlechte Praxis, es sei denn, die Liste der Variablen ist ungewöhnlich lang. In diesem Fall liegt das Problem wahrscheinlich am Design der Funktion. Warum nicht ein Objekt übergeben, das viele der Parameter kapselt?
"... und wenn ja, wie kann ich sie davon überzeugen, es nicht zu tun?"
Binde sie fest und kitzle sie weiter, bis sie damit einverstanden sind, diesen Mist zu stoppen.
quelle
Warum verschwendest du Zyklen für so ein unbedeutendes Anliegen? Starten Sie einfach Ihre vertrauenswürdige IDE, öffnen Sie die Datei und formatieren Sie sie neu. Voila! Es wird in welcher Form auch immer Sie wollen.
Kommen wir nun zu dem wirklich wichtigen Thema - vi oder emacs, LOL.
quelle
Ich würde sagen, wenn die Argumente in eine Zeile passen, tun Sie dies. Wenn nicht, sorgt ein Argument pro Zeile für eine gute Lesbarkeit.
gegen
quelle