2013-04-11 9 views
27

Da ich ein begeisterter Benutzer von NetBeans bin, erhalte ich immer wieder Vorschläge, meine Variablendeklarationen und Zuweisungen aufzuteilen, wenn ich eine neue Variable einführe. Als superschnelles Beispiel aus der Spitze von meinem Kopf, lassen Sie sich diese Java Linie nehmen:Teilungserklärung und Zuordnung = Good Practice?

String someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 

gegen:

String someInput; 
someInput = JOptionPane.showInputDialog(null, "- Enter something: "); 

NetBeans letztere zu bevorzugen scheint (würde ich nicht über andere IDEs wissen, obwohl). Obwohl es eindeutig in beide Richtungen funktioniert, was würde, wenn überhaupt, als "gute Praxis" betrachtet werden? Oder ist es nur eine Frage der persönlichen Vorliebe?

(Offensichtlich ist die zwei bedeutet eine zusätzliche Zeile aufzuteilen, die Sie gerade in einem kombiniert haben könnte, aber das ist nebensächlich.)

+13

Es verwirrt mich, dass jemand würde die letztere über die ehemalige bevorzugen. – NPE

+0

Hmm, vielleicht hast du in NetBeans eine lustige Code-Style-Sache! –

+0

Die erste Option ist eine "wirtschaftliche" Möglichkeit, das Objekt zu initialisieren. (Ich denke) Der zweite ist nur ein bisschen sauberer, weil es erlaubt, die Variablendeklaration von der Zuweisung zu gruppieren. Ich denke, dass von einem rein ästhetischen Standpunkt der zweite vorzuziehen ist, aber der erste ist in Bezug auf die Einfachheit wünschenswerter. – Barranka

Antwort

35

Es gibt keinen Grund, die Erklärung und die Zuordnung zu teilen, wenn Sie gerade gehen um sie in aufeinanderfolgenden Zeilen zu haben. Ich würde sie nur aufteilen, wenn die Zuweisung konditional wäre oder wenn sie in einen separaten Codeblock gehen müsste (wie ein try/catch, oder wenn die Zuweisung in einen Konstruktor geht usw.).

+1

Ja, das klärt auf. Besser, an dem festzuhalten, was für Sie sinnvoll ist als für die IDE! –

0

Ich glaube nicht, dass es eine große Sache ist. Wählen Sie einen Stil, den Sie mögen, und bleiben Sie dabei (wenn Sie in einem Team sind, hilft es, wenn jeder seinen Code ähnlich auslegt).

Ich persönlich bevorzuge es, meine Variablen direkt zum Zeitpunkt der Deklaration zu initialisieren. Aus diesem Grund würde ich den ersteren gegenüber dem letzteren bevorzugen.

15

Ein allgemeines Muster, das auf die frühe statisch typisierte Programmierung zurückgeht, besteht darin, alle oben genannten Variablen am oberen Ende des Blocks zu deklarieren und anschließend diesen Werten zuzuweisen.

Mit diesem gesagt, solange Sie in der Lage sind, die Absicht Ihres Codes den Menschen, mit denen Sie daran arbeiten, oder sich selbst in einem Jahr klar zu kommunizieren, sollte es eigentlich keine Rolle spielen.

Lassen Sie uns auf den Aufbau von Programmen unserer traditionellen Haltung ändern: Statt dass unsere Hauptaufgabe einen Computer anzuweisen, sich vorzustellen, was uns eher Konzentrat zu tun, lassen den Menschen zu erklären, was wir wollen Computer zu tun. - Donald Knuth

+6

+1 Nettes Zitat, danke! – Barranka

+1

+1 'erklären; erklären; erklären; zuordnen; zuordnen; assign; 'ist wahrscheinlich der Stil, den NetBeans zu erzwingen versucht, anstatt' declare; zuordnen; erklären; zuordnen; erklären; zuweisen; '. –

+0

Sehr schönes Zitat in der Tat, danke! –

0

Code Complete, die von den meisten der Programmierung Gemeinschaft angesehen wird, schlägt in seiner Seite 241, dass als eine Frage der defensiven Programmierung können Sie entweder jede Variable initialisieren, wie sie deklariert ist (erste Option) oder initialisieren Sie es in der Nähe des Ortes, an dem es zum ersten Mal verwendet wird (Ihre zweite Option).

Nichtsdestoweniger schlägt das Buch vor, dass die zweite Option besser ist, denn wenn Sie die erste Option verwenden, hat sich Ihre Variable möglicherweise zwischen ihrer Deklaration und ihrer Verwendung geändert.

In Ihrem Fall ist der Unterschied zwischen Deklaration und Verwendung im zweiten Fall eine einzelne Zeile. Daher gelten die Bedenken des Buches nicht. Nichtsdestoweniger sind seine Bedenken berechtigt und dies könnte der Grund sein, warum die Designer von Netbeans diesen Tipp aufgenommen haben (obwohl sie ihn überstrapaziert haben).

+0

Sie scheinen den Rat des Buches falsch anzuwenden. Auf der Seite, auf die Sie verweisen, heißt es: "Einige Sprachen, einschließlich Visual Basic, unterstützen das Initialisieren von Variablen nicht, wie sie deklariert sind", aber Java ist keine dieser Sprachen. Daher gilt dies nicht. Weiter heißt es in dem Buch: "Im Idealfall deklariere _und_ definiere jede Variable in der Nähe ihrer ursprünglichen Position ... In Sprachen, die dies unterstützen, wie C++ und Java, sollten Variablen in der Nähe ihrer ursprünglichen Verwendung deklariert und definiert werden." Es ist kein Entweder-oder-Vorschlag mit Java. – DavidS

3

Netbeans schlägt vor, diese als es Codierung beschleunigen kann, zum Beispiel diese Zuordnung prüfen

final String myString = "somevalue" 

Sie dann entscheiden, dass tatsächlich der Wert auf etwas ein von zu der konvertieren boolean

final String myString; 
if(something) { 
    myString = "somevalue" 
} else { 
    myString = "someothervalue" 
} 

hängt Anderenfalls können Sie den Code-Hinweis verwenden, um Deklaration und Zuweisung zu verschütten, und die Vorlage if...else, um den Code in sehr wenigen Schritten zu generieren.

Im Allgemeinen, wenn Sie bedingungslos zuweisen, gibt es keinen Grund, Deklaration und Zuweisung zu teilen.

+1

Ich denke nicht, dass die Deklaration von der Zuweisung auf die Verwendung eines solchen Falls (wenn/sonst, try/catch, usw.) die Mühe wert ist, wenn man bedenkt, dass es das Umschreiben des Variablennamens erfordert. – Alexander

+0

"Lasst uns den ganzen Code länger und unnötigerweise komplexer machen, damit wir eine unbedeutende Menge an Zeit von einer bereits schnellen Aufgabe abscheren können, auch wenn es eines Tages notwendig ist." Ja. Nr. – Alexander

+0

@AlexanderMomchliov der Code ist anders. Eine ist eine direkte Zuweisung und eine ist eine bedingte Zuweisung. Ich sehe wirklich nicht, wie dein Kommentar passt. –

10

Dies war eine Option, die zu NetBeans irgendwo zwischen 7.0 und 7.3 hinzugefügt wurde. Wenn Sie nicht diesen Hinweis mag, kann es durch unchecking geändert werden: Extras> Optionen> Editor> Hinweise> Vorschläge> Split Erklärung

Screenshot of NetBeans > Prefs > Hints > Suggestions > Split Declaration

+0

Für IntelliJ IDEA ist es unter Datei - Einstellungen - Editor - Intentionen - Java - Deklaration - Split-Deklaration. – RenniePet