Ich habe einige Entwickler gesehen, die Instanzvariablendeklarationen am Ende von Klassen platzieren, obwohl ich sie meistens ganz oben sehe. Die einzigen Gründe, die mir dafür einfallen, sind stilistische Präferenzen oder vielleicht macht es sie irgendwie einfacher, mit einer IDE zu arbeiten. Gibt es einen legitimeren Grund, diesen Stil zu wählen?Platzierung von Instanz-Variablendeklarationen
Antwort
Wegen "Programm zu einer 'Schnittstelle', nicht eine 'Implementierung'." (Gang of Four 1995: 18) (http://en.wikipedia.org/wiki/Design_Patterns#Introduction.2C_Chapter_1), bevorzugen einige Leute, Instanzvariablen am Ende der Klasse zu deklarieren. Die Theorie ist, dass der Benutzer einer Klasse mehr daran interessiert ist, was er mit der Klasse (Methoden) machen kann als mit der Art, wie etwas getan wird (Variablen). Wenn Sie die Methoden an der Spitze der Klasse platzieren, werden sie zuerst dem Benutzer angezeigt, wenn sie sich den Code ansehen.
Es ist meist (wenn nicht ganz) persönliche Vorlieben. Ich mag sie an der Spitze, aber ich könnte nicht wirklich einen besseren Grund dafür geben, als dass es so ist, wie ich es gewohnt bin.
Es gibt keinen besonders "guten" Grund dafür, es auf die eine oder andere Weise zu tun. Das einzige, was wirklich wichtig ist, ist, dass jeder am selben Projekt dasselbe tut.
Allerdings ist es weit verbreiteter in meiner Erfahrung, sie an die Spitze zu stellen, und es ist die Praxis, die von Java style guidelines empfohlen wird, also das ist, womit ich gehen würde.
Sie können die von Ihnen gewählte Konvention mit einem automatischen Quellcodeformatierer wie Jalopy oder dem, der mit Eclipse geliefert wird, erzwingen.
Die meisten Instanzvariablen sind private
, daher neige ich dazu, sie unten zu setzen, weil ich Mitglieder in der Reihenfolge abnehmender Sichtbarkeit deklariere. Wenn ich sie in der Reihenfolge der steigenden Sichtbarkeit erklärte, würden sie an der Spitze sein, die auch angemessen ist.
Was ich nicht mag ist private Felder gefolgt von öffentlichen Feldern gefolgt von privaten Methoden. Wenn ich eine Clientklasse entwickle, möchte ich alle öffentlichen Teile zusammen haben (da das alles ist, was mich interessiert).
Ich habe immer rationalisiert, dass wenn Sie eine private Klassenvariable haben, dann haben Sie entweder hardcoded eine Konfiguration, oder Sie verfolgen den Status auf die eine oder andere Weise. Wenn du den Zustand verfolgst, dann 1) sollte das für jeden offensichtlich sein, der Code in der Datei schreiben wird, sobald sie die Datei öffnen, und 2) das Verfolgen vieler Zustände ist ein riesiger Code-Geruch, und wenn mein Entwickler tun das, dann möchte ich, dass es offensichtlich ist. Wenn ich es also an die Spitze setze, macht das schlechten Code offensichtlich und dient als Warnung für zukünftige Leute, die den Kurs bearbeiten.
Auf jeden Fall trennen Sie Ihre öffentlichen/geschützten vs. privaten Felder und Mitglieder, denn Menschen, die an einem interessiert sind, sind wahrscheinlich nicht an dem anderen interessiert.
Ein Benutzer einer Klasse sollte nicht in erster Linie in den Quellcode schauen müssen (die Verwendung sollte dokumentiert sein und zugänglich sein, ohne den Quellcode zu betrachten). Der einzige Grund, warum jemand den Quellcode betrachten sollte, ist, die inneren Abläufe zu verstehen, weshalb ich nicht empfehlen würde, private Felder ganz unten zu platzieren. –