Stil-Frage: this-Referenz

Status
Nicht offen für weitere Antworten.
M

Mr. M

Gast
Hallo,

ich habe eine Stil-Frage zu Java bzgl. der this-Referenz. Sollte ich this innerhalb einer Klasse immer benutzen, oder nur wenn es nötig ist, z.B. bei Zuweisungen?

Beispiel:
Code:
	public Player(int x, int y) {
		this.x = x;
		this.y = y;
	}

	public int getX() {
		return this.x;
	}

Beim Konstruktor ist die Sache eindeutig, aber wie sieht es mit der Methode aus? this ist nicht nötig, sollte man es auf Grund des Stils trotzdem verwenden -- oder gerade nicht?

Danke schon einmal.
 

meez

Top Contributor
Mich nervts eher, wenn zuviel this steht...Aber das ist wohl tatsächlich Geschmakssache...
 
M

Mr. M

Gast
Hmm, ich hätte da gerne ein Machtwort in Form einer Code Convention oder so (erfahrene Programmierer gelten auch ^^). :wink: Was ist objektiv betrachtet der bessere Stil?
 

meez

Top Contributor
Mr. M hat gesagt.:
Hmm, ich hätte da gerne ein Machtwort in Form einer Code Convention oder so (erfahrene Programmierer gelten auch ^^). :wink: Was ist objektiv betrachtet der bessere Stil?

Sind wir nicht erfahren genug :bahnhof: .... Wie auch immer; Objektiv betrachtet kein this, weil es den Code unnötig vergrössert und auch die .class Files....
 
G

Guest

Gast
Okay, Danke! Damit hat sich die Frage erledigt und ich bin zufrieden. :wink:
 

Wildcard

Top Contributor
meez hat gesagt.:
Wie auch immer; Objektiv betrachtet kein this, weil es den Code unnötig vergrössert und auch die .class Files....
Das Gegenargument ist, das this klarer herausstellt das man auf eine Instanzvariable zugreift.
Theoretisch wiegen sich beide Argumente auf, in den Zeiten moderner IDEs halte ich zweiteres aber für obsolete.
 

Leroy42

Top Contributor
Der Gebrauch unnötiger this regt mich fast so auf wie
diese unäglichen Vergleiche auf true/false
Code:
boolean paintGrid = true;
...
if (paintGrid == true) {
    paintGrid();
}

Schließlich kommt doch auch kein Mensch auf die
Idee soetwas wie

Code:
if (a<b == true)
zu schreiben. :x
 

Leroy42

Top Contributor
Wildcard hat gesagt.:
Das Gegenargument ist, das this klarer herausstellt das man auf eine Instanzvariable zugreift.

Wer Methoden fabriziert bei denen es nicht sofort ersichtlich ist,
ob es sich bei Zugriffen um lokale Variablen handelt oder nicht,
hat von Haus aus etwas falsch verstanden. :cool:
 

Wildcard

Top Contributor
Die Argumentation bezieht sich nicht nur auf lokale Variablen.
Da gibt's auch noch vererbte protected, friendly und public Variablen :wink:
 

Leroy42

Top Contributor
Wildcard hat gesagt.:
Die Argumentation bezieht sich nicht nur auf lokale Variablen.
Da gibt's auch noch vererbte protected, friendly und public Variablen :wink:

Wenn eine Klasse von einer anderen erbt, dann gehören
für mich die mitgeerbten Member zu der erbenden Klasse.

Anders gesagt: Ich will gar nicht wissen, ob ich auf ein Member
der eigenen Klasse oder einer ihrer Superklassen zugreife.

Seit wann gibt es in Java friendly-Variablen :shock: :autsch:
 

Leroy42

Top Contributor
Wildcard hat gesagt.:
Leroy42 hat gesagt.:
Wildcard hat gesagt.:
Seit wann gibt es in Java friendly-Variablen :shock: :autsch:
Wenn dir default lieber ist :roll:
Meinst du jetzt package-default?
Diese gehören doch entweder der eigen (Super)Klasse an oder
sie müssen mit einer Instanz der Klasse (der Klasse selbst)
gecontexted werden. (Keine Ahnung wie der korrekte Begriff hierfür ist)
 

Leroy42

Top Contributor
Genau den habe ich auch vermutet:
Code:
package xyz;
class A {
  int a;
}
class B {
  int b;
  void methode(A meinA) {
    b = 19; // Dieselbe Klasse
    meinA.a = 42; // a ist "friendly" muß aber "im Kontext" von meinA aufgerufen werden
  }
}
 

Wildcard

Top Contributor
Nö. :shock: Du musst nur B von A erben lassen. Ist doch auch klar, das du nicht einfach so auf irgendwelche Variablen im selben package zugreifen kannst ???:L
 

Leroy42

Top Contributor
Wildcard hat gesagt.:
Nö. :shock: Du musst nur B von A erben lassen. Ist doch auch klar, das du nicht einfach so auf irgendwelche Variablen im selben package zugreifen kannst ???:L

Ja aber wenn B von A erbt, dann interessiert es mich eben nicht
ob a nun in B deklariert wurde oder in A.

B ist ja ein A. Also gehört B auch alles was A gehört/anbietet/deklariert/...

Leroy42 hat gesagt.:
Wenn eine Klasse von einer anderen erbt, dann gehören
für mich die mitgeerbten Member zu der erbenden Klasse.

Anders gesagt: Ich will gar nicht wissen, ob ich auf ein Member
der eigenen Klasse oder einer ihrer Superklassen zugreife.
 

Wildcard

Top Contributor
Wie gesagt, ich bin kein Befürworter dieser Schreibweise. Gast hat nach einer objektiven Stellungnahme gefragt und dazu gehört eben die Gegenseite.
Für mich ist es auch transparent ob eine Variable nun von der superklasse kommt oder nicht und gleiche Namen in Vater und Kinderklasse sind nun wirklich daneben, daher halte ich die explizite Unterscheidung auch nicht für notwendig.
 

byte

Top Contributor
Ich benutze this meistens auf Faulheit, damit der Code Assistent aufgeht und ich das Feld/ die Methode auswählen kann. Später fliegen sie dann aber beim "Clean Up..." wieder raus. :D

God bless the Eclipse IDE... :bae:
 

sliwalker

Top Contributor
Wenn ich immer auf den lahmar....en Code-Assistenten warten müsste, würde ich auch anfangen Java als langsam zu bezeichnen :)

Du schmeisst alle "this" beim "Clean Up..." wieder raus? mutig...;)

Das Argument, dass die .class-datei größer wird zählt bei mir genauso wenig wie das Argument, dass Abblendlicht bei Tag "ja viel zu teuer" ist. Für mehr "Sicherheit" bzw. für "deutlichen und einheitlichen" Code, würde ich einiges in Kauf nehmen, was vielleicht zu Anfang unbeliebt ist. Ich selbst verwende so wenig "this" wie möglich, kenne aber Gründe es immer zu verwenden. Denn wenn man mal in der misslichen Lage ist, Quelltext mittels Programm zu "korrigieren" wird ein "this" vor jeder Zuweisung einer Klassenvariablen zu schätzen wissen. Selbst erlebt -.-
Klar das da Fehler in der Planung, Entwicklung, whatever, im Vorfeld schon aufgetreten sind, aber wo passiert das nie?

greetz
SLi
 

byte

Top Contributor
sliwalker hat gesagt.:
Wenn ich immer auf den lahmar....en Code-Assistenten warten müsste, würde ich auch anfangen Java als langsam zu bezeichnen :)

Ich weiss ja nicht, was Du für nen Rechner hast, aber ich warte selten auf ihn. ;) Gerade bei bei vielen Methodenparametern gehts damit oft fixer, vor allem seit Eclipse 3.2...

Du schmeisst alle "this" beim "Clean Up..." wieder raus? mutig...;)

Nicht ich schmeisse sie raus, sondern Eclipse auf Kommando... und natürlich auch nur diejenigen, die unnötig sind.
 

sliwalker

Top Contributor
byto hat gesagt.:
Ich weiss ja nicht, was Du für nen Rechner hast, aber ich warte selten auf ihn. ;) Gerade bei bei vielen Methodenparametern gehts damit oft fixer, vor allem seit Eclipse 3.2...

Echt? Springt der bei Dir auf wie nix? Also gerade wenn ich this oder static-Attribute abrufen möchte, dauert es round about 0,5 - 2 Sekunden bis der Assistent aufspringt. Hab auch eclipse 3.2 und mein Rechner ist schon ganz gut, weil ich eben auch gerne mal ein Spielchen zocke.

greetz
SLi
 

Wildcard

Top Contributor
Linux oder Windows? In Windows wird Eclipse leider sehr aggressiv ausgelagert, was für Eclipse den Performance-Tod bedeutet.
 

Murray

Top Contributor
sliwalker hat gesagt.:
Das Argument, dass die .class-datei größer wird zählt bei mir genauso wenig wie das Argument, dass Abblendlicht bei Tag "ja viel zu teuer" ist.
Hat mal jemad ausprobiert, ob überflüssige "this" den Byte-Code überhaupt verändern? Das hätte ich eigentlich nicht erwartet - während das Abblendlicht definitiv zu einem Mehrverbrauch führt, so dass man hier wirklick abwägen muss, was einem die Erkennbarkeit wert ist.

<slightly off-topic>
Ich bewege mich (beruflich) - in einer Welt, in der - abweichend von den Sun-Coding-Conventions - Class-Member mit Großbuchstaben bezeichnet werden, also
Code:
class X {
  private Y Z;

 public X( final Y z) {
   Z = z; //-- kein explizites 'this' notwendig
 }

 public doSomething() {
   Z.doABC();
 }

}
OK, man kann so - z.B. in X#doSomething - nicht mehr anhand der Konvention erkennen, ob es sich bei Z jetzt um den
Namen einer Variablen oder um eine Klasse handelt, an der eine (statische) Methode aufgerufen werden soll - aber ist das wirklich wichtiger als die Unterscheidung, ob Z eine lokale Variable oder ein Member ist??
</slightly off-topic>
 

sliwalker

Top Contributor
Windows. (Spiele)

Wenn Du mit "aggresiv ausgelagert" die Festplatten-Auslagerung, sprich die Nutzung des virtuellen Arbeitsspeicher meinst, trifft das bei mir nicht zu. Die ist bei mir abgeschaltet, genauso wie die Systemwiederherstellung, weil sich in diesem Bereich Viren und derlei Zeug sehr wohl fühlen. Diese Bereiche können auch von Virenscannern nicht eingesehen werden, was das ganze noch schlimmer macht. Wenn ich eclipse starte, dann steht die javaw mit ca 75 MB im Speicher. Auslagerungsdatei wird mir im Taskmanager mit 8 MB angezeigt. Was ich mir nur durch meinen 8MB Festplattencache erklären kann. Naja...ich will mal den Thread nicht entfremden ;)

Moral von der G'schicht,
"this" ohne viel RAM lieber nicht. (Ähhm..ja. Ich geh mal off :) )
 

Wildcard

Top Contributor
Überhaupt keine Auslagerungsdatei? :shock:
Naja, dann kann ich's mir nicht erklären, bei mir geht das sehr flott...
 

TheJavaKid

Top Contributor
also bei so sachen wie wir in der schule machen schreib immer this. aber privat nich... ausser in actionscript, flash xD
 

byte

Top Contributor
Bei mir (Intel Duo Core, 2GB RAM) ist der Code Assistent eigentlich sofort da.
 

Ark

Top Contributor
@topic: Ich verwende this nur in settern bzw. in Konstruktoren. In anderen Methoden nehme ich eben andere (meist kürzere) Bezeichner. ;)

MfG
Ark
 

AlArenal

Top Contributor
Dererlei Diksussionen gibts in manche anderer Sprache wohl nicht. Ruby z.B. verfolgt den Ansatz 'Design by Convention' und schreibt vor wie welche Variablen je nach Scope benannt werden müssen. Da gibts keine Diskussionen und auch keine Umstellung weil Coder A in Projekt 123 es so und Coder 2 in Projekt 234 es anders hält.
Diese gewissermaßen implizite Logik weiß man irgendwann auch zu schätzen, wenn aus der Entscheidungsfreiheit eine Last geworden ist. Gerade für Einsteiger ist vieles sicher einfacher wenn es einfach feste Vorgaben gibt und man nicht 1001 Möglichkeit hat etwas zu handhaben. Es gibt auch diverse Java-Entwickler die Instanzvariablen ein '_' oder sonstwas voranstellen. Habs auch mal probiert und dann doch wieder verworfen.
 
G

Guest

Gast
Wie wär's mit sowas?
Code:
public class WasAuchImmer implements IWasAuchImmer
{
   public static final int KONSTANTE = 1; 

   private String m_Vorname; // Membervariable mit m_
   
   public WasAuchImmer(String p_Vorname) // Parameter mit p_
   {
      m_Vorname = p_Vorname;

      String v_Vorname = ... // prozedur-lokale Variable mit v_ 
   }
   
   ...
}
Man erkennt dann überall auf den ersten Blick, was, wo definiert ist.
 

SnooP

Top Contributor
also ich muss auf den code-assist bei eclipse 3.1 auch ca. ne Sekunde warten... und das nervt mich auch (das war bei VisualStudio tatsächlich mal fixer!), aaaaber ;) - ich mach das auch so, weil ich oft vergesse, wie denn die dämlichen Methoden so hießen :) - und ob ich nicht doch in irgendwas rumcasten muss, was ich vergessen hab .. bin wohl doch nicht soon hacker, wie ich immer dachte :)
und wenn man viele lokale aber auch objektvariablen in einer Methode benutzt, verwende ich this häufig auch bewusst, für die bessere unterscheidung, auch wenn man das an den Variablennamen erkennen könnte, ist this ein sehr leicht zu erkennendes Schlüsselwort, was das ganze imho dann lesbarer macht.

Diese Unterstrich-Variablen find ich persönlich sehr unschön, aber sowas kommt dann auch immer auf die persönlichen bzw. Team-Codeconventions an. Das kann manchmal schon sinnvoll sein, sowas zu benutzen.
 

byte

Top Contributor
Ich kann mich mit dieser Unterstrich-Schreibweise aus folgenden Gründen nicht anfreunden:

1. hässlich
2. die deutsche Tastatur zwingt einen schon zu genug Fingerakrobatik beim Coden
3. vernünftiges Syntax-Highlighting setzt Klassenvariablen eh schon farbig ab

Und im Zweifelsfall reicht ja ein einfacher STRG + Klick (in Eclipse) aus, um zur Deklaration zu springen und alle Zweifel zu beseitigen.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
G Stil-und Lesbarkeit des Codes Allgemeine Java-Themen 18
S Interface Welchen Interface Stil favorisiert ihr? (usability) Allgemeine Java-Themen 17
P guter Stil? Allgemeine Java-Themen 7
S besserer Stil ? Allgemeine Java-Themen 5
T [Konvention/Stil] PropertyChangeEvent vorher oder nachher? Allgemeine Java-Themen 2
KonradN Mal eine Frage zu Binary Serialization Allgemeine Java-Themen 15
8u3631984 Frage zu Java Streams min / max Allgemeine Java-Themen 17
8u3631984 Frage Performance bei Linked List und Array List Allgemeine Java-Themen 5
H Frage regex greater than less than Allgemeine Java-Themen 7
berserkerdq2 Frage zu IntelliJ und JavaFX Allgemeine Java-Themen 1
W Timer Konzept-Frage Allgemeine Java-Themen 16
T Eine Frage des Designs Allgemeine Java-Themen 2
C Frage zu eigenem TableCellRenderer Allgemeine Java-Themen 11
C Programmvorstellung & Frage zum Thema Geschäftsform Allgemeine Java-Themen 51
J Frage zu System.getproperties. Allgemeine Java-Themen 60
molat100 wie kann man die Frage beantworten Allgemeine Java-Themen 1
pkm Frage zur Präzision von Calendar.WEEK_OF_YEAR Allgemeine Java-Themen 12
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
pkm Frage nach eventuellem syntaktischen Zucker bei der Konkatenation von ArrayLists Allgemeine Java-Themen 4
M Frage-Antwortspiel wie Wer wird Millionär Allgemeine Java-Themen 1
F Frage zu System.in Allgemeine Java-Themen 3
marcooooo Frage zum Beispiel im Anhang Allgemeine Java-Themen 16
T Meine Frage lautet wie ich 2 CSV Dateien miteinander in Java verbinde und Spalten die zueinander gehören durch den gleichen Key zusammen ausgebe? Allgemeine Java-Themen 5
S Noch eine Design-Frage zu Setter Allgemeine Java-Themen 6
B For-Loop Frage Allgemeine Java-Themen 21
L Java frage Allgemeine Java-Themen 3
bueseb84 Frage zu Mock und UpperBound Allgemeine Java-Themen 2
M Frage zum Konstruktor Allgemeine Java-Themen 2
W Best Practice Frage zur Umsetzung MVC Allgemeine Java-Themen 9
P String-Verschlüsselung - Frage zur Sicherheit Allgemeine Java-Themen 21
B Frage zu Unit-Tests Allgemeine Java-Themen 6
T Allgemeine Frage: GUI für 3D-Visualisierung Allgemeine Java-Themen 5
R Allgemeine Frage zu RMI bei MVC Allgemeine Java-Themen 2
O Frage zum Runtimeverhalten von Java ... Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
B Generelle Frage bei einer Webanwendung / Reduzierung von DB Abfragen Allgemeine Java-Themen 1
D Frage zu Vererbung Allgemeine Java-Themen 5
J Frage zu regulärem Ausdruck Allgemeine Java-Themen 2
M Allgemeine Frage: Wie lernt man Java / Programmieren von Grund auf? Allgemeine Java-Themen 7
rentasad Design-Frage - Interfaces, Klassen, statische Methoden Allgemeine Java-Themen 3
S Frage zur JLS Allgemeine Java-Themen 0
J Verständnis Frage zur Instanz, Objekte, Instanzierung, Referenz Allgemeine Java-Themen 14
A Methoden Allgemeine Java Frage Allgemeine Java-Themen 3
E String Frage Allgemeine Java-Themen 9
I bin neu bei GitHub, Frage zur Sicherheit Allgemeine Java-Themen 14
C J2V8 NodeJs Java Bride Problem und Frage!?!? Allgemeine Java-Themen 1
C KeyListener Frage Allgemeine Java-Themen 3
T Frage zu UML in Java programmieren Allgemeine Java-Themen 1
R Konstanten initialisieren - FRAGE Allgemeine Java-Themen 3
MTJ004 FTP Frage zu FTP Speicherung Java-Android-FTP Allgemeine Java-Themen 5
J Frage zum Entwurf / json-Datenmodell Allgemeine Java-Themen 8
A Frage zu meinem Code Allgemeine Java-Themen 2
RalleYTN Classpath Nur ne kleine Frage zur MANIFEST.MF Allgemeine Java-Themen 4
T Frage zu Access Modifiers Allgemeine Java-Themen 6
W Input/Output Frage zu pdfbox und FileUtils Allgemeine Java-Themen 2
O Frage zur Implementierungsweise Allgemeine Java-Themen 4
B Frage zu Bitshift Allgemeine Java-Themen 3
J Java Zufallsgenerator (6 aus 49) Frage Allgemeine Java-Themen 7
L Frage zu RIA und GWT Allgemeine Java-Themen 0
P Concurrency Frage Allgemeine Java-Themen 8
M Frage zu Enumerations Allgemeine Java-Themen 2
F Unlimited Strength Policy. Frage Verbreitung der Anwendung Allgemeine Java-Themen 1
F Frage zur Library JTS Allgemeine Java-Themen 5
S Java Design Frage Allgemeine Java-Themen 10
E Reflection? Frage Allgemeine Java-Themen 4
C FileInputStream frage Allgemeine Java-Themen 6
G Polymorphie Programmdesign Frage Allgemeine Java-Themen 20
Uzi21 Frage zu NetBeans ( Console) Allgemeine Java-Themen 11
D Classpath Frage zum Java Resource Loading Allgemeine Java-Themen 2
G Frage zu JPA Allgemeine Java-Themen 1
S Methoden Frage Allgemeine Java-Themen 2
P MVC - Frage zu Model Allgemeine Java-Themen 4
K Frage zu Locks Allgemeine Java-Themen 1
S Frage zu abstract Allgemeine Java-Themen 5
M ArrayList<String> Frage Allgemeine Java-Themen 7
M OOP Design Frage Allgemeine Java-Themen 2
N Frage zur while-Schleife Allgemeine Java-Themen 18
T Best Practice Auslesen von Zeichenketten (Frage, Antworten, usw) Allgemeine Java-Themen 4
C Eine Frage zur Bearbeitungszeit Allgemeine Java-Themen 8
H Frage wegen Heap-Speicher Allgemeine Java-Themen 2
T Garbage Collection Frage Allgemeine Java-Themen 15
P Kurze Frage: aus einer File die Zeilenanzahl auslesen Allgemeine Java-Themen 9
D Frage zu Java und Umlauten / charsets Allgemeine Java-Themen 2
B Frage zu Java und OpenGL? Allgemeine Java-Themen 3
Q Kapselung Allgemeine Design- Frage Allgemeine Java-Themen 8
A eine test thread.join() frage Allgemeine Java-Themen 2
DStrohma LayoutManager Frage zum GridBagLayout Allgemeine Java-Themen 4
F Frage zu Regex möglich Allgemeine Java-Themen 4
H XML-File mit Java erzeugt Frage Allgemeine Java-Themen 10
D Frage und Antwort Programm, Problem bei Methodenaufruf Allgemeine Java-Themen 3
J NetBeans Frage bezüglich der Scanner-Klasse Allgemeine Java-Themen 6
H Java Vector Frage Allgemeine Java-Themen 9
W Frage... Allgemeine Java-Themen 29
R Frage zur topologischen Sortierung Allgemeine Java-Themen 2
H Frage zu weka.core.Instance Allgemeine Java-Themen 3
Y Kleine Frage zu String.split Allgemeine Java-Themen 3
T Frage zu Klassendesing Allgemeine Java-Themen 3
W Frage zu Refactoring statischer Methoden Allgemeine Java-Themen 4
C Eclipse Wichtige frage Allgemeine Java-Themen 5
H Frage zu java.weka.core.Instances Allgemeine Java-Themen 3

Ähnliche Java Themen

Neue Themen


Oben