Guter Stil von Beginn an (this oder expliziete Parameter)

Uff.. heiße Diskussion.. Komm ja mim Lesen nicht mehr nach :-)

Mit genauer Beschreiben meine ich, dass ich in der Methode bei den Parametern auch gleich sehe, für welchen Typ diese Methode gedacht ist.

Angenommen ich habe mehrere Klassen:
Auto, Motorrad, Flugzeug

Und jede besitzt die Methode "getGeschwindigkeit" sowie jeweils 50 andere.
Wenn ich nun den Sourcecode (mit 700 Zeilen :-) ) ansehe und bei einer Methode getGeschwindigkeit() lande, sehe ich auf den ersten Blick, für welchen Typ die Funktion gedacht ist.

(Ich gehe bei dem trivialen Beispiel davon aus, dass die Geschwindigkeit für jeden Typ anders berechnet wird)

Das meine ich mit "übersichtlicher"..
 
Hallo!

Du kannst das this bei jeder globalen Variable davor schreiben, aber du musst es nur tun, wenn sie wirklich den gleichen namen haben.
"Globale" Variablen gibt es unter Java nicht... es gibt statische Attribute die dann an eine Klasse und nicht an eine bestimmte Instanz gebunden sind. Dabei sollte man this. Weglassen und den entsprechenden Klassennamen vorransetzen... Was du meinst sind Instanzvariablen/Membervariablen/Instanzattribute etc.

Gruß Tom
 
Hallo!

Und jede besitzt die Methode "getGeschwindigkeit" sowie jeweils 50 andere.
Wenn jede Klasse diese Methode besitzt dann ist was faul an deinem Design.... -> Erzeuge eine entsprechende Basisklasse (leite die übrigen Klassen von dieser ab) und implementiere die "generischen" Methoden dort...

Gruß Tom
 
Da hast Du natürlich recht.. war ein schlechtes Beispiel. Sollte auch nur zur Veranschauung was ich mit "Beschreiben" meine dienen.

Also kann ich davon ausgehen, dass das "Angewöhnen" von "this" anstelle von expliziter Parametrisierung (außer in Fällen wo es sowieso benötigt wird) durchaus in Ordnung ist und nicht die Lesbarkeit des Quellcodes beeinträchtigt!?
 
Moin,
prinzipiell würde ich eher sagen, dass es schlechter Stil ist, einen Übergabeparameter so zu nennen wie eine Instanzvariable. Einfacher und weniger fehlerträchtig ist in diesem Fall deshalb z.B. die Verwendung von

public void setGewicht(int newGewicht)

an Stelle von

public void setGewicht(int gewicht)
 
@ Tom

Also ich hab das so gelernt das eine Variable die in der ganzen Klasse bekannt ist eine "Globale" Variable ist.
Und eine Variable die nur in ner Methode oder Anweisungsblock bekannt ist, eine "lokale" Variable ist.

Bei "Globalen" Variablen kann man dann this davor schreiben, muss man aber nicht, oder irre ich mich da
 
Das man nach Möglichkeit gut formulierte Variablenbezeichner nehmen sollte, ist klar (wie in jeder Programmiersprache :)) (Der Variablenbezeichner "name" ist wahrscheinlich nicht sonderlich clever).

Andererseits habe ich bei Javabuch wieder gelesen, dass es nicht gut ist, Variablen oder Methoden mittels Bezeichner in Verbindung mit der zugehörigen Klasse zu bringen.

Schlecht:

Klasse Auto
String autoname;
boolean autokombi;
methode autoBeschleunigen ()

Warum man das nicht so machen sollte, ist mir allerdings nicht wirklich klar...
 
Hallo!

Also ich hab das so gelernt das eine Variable die in der ganzen Klasse bekannt ist eine "Globale" Variable ist.
Kommt drauf an wie du "Globale Varaible definierst... für mich ist Instanzvariable != Globale Variable... eine Globale Variable entspricht für mich einer öffentlichen statischen Klassenvariable.

Und eine Variable die nur in ner Methode oder Anweisungsblock bekannt ist, eine "lokale" Variable ist.
Das ist korrekt.

Bei "Globalen" Variablen kann man dann this davor schreiben, muss man aber nicht, oder irre ich mich da
Wie gesagt nach deiner Definition sind für dich "Globale Variablen" Instanzvariablen ... ja davor kann man this schreiben um sie eindeutig zu identifizieren...

@Snape
Moin,
prinzipiell würde ich eher sagen, dass es schlechter Stil ist, einen Übergabeparameter so zu nennen wie eine Instanzvariable.
Jeder hat so seinen eigenen Stil... ich und meine Kollegen teilen die Meinung, dass es besserer Stil ist Konstruktorparameter so zu bennennen wie die entsprechenden Membervariablen und diese dann mit this bei der Zuweisung eindeutig zu qualifizieren...

Außerdem ist deine Argumentation etwas schwach... welche Variante wäre denn hier "schicker" ?
Code:
/**
 * 
 */
package de.tutorials;

/**
 * @author Tom
 *
 */
public class BusinessObject {
	
	private boolean isNew;
	private Object someData;
....
	
	1)
	public BusinessObject(boolean isNewNew, Object someDataNew){
		isNew = isNewNew;
		someData = someDataNew;
	}
	
	2)
	public BusinessObject(boolean isNew, Object someData){
		this.isNew = isNew;
		this.someData = someData;
	}
....
}
1 oder 2? ;-)
Ich denke mit Variante 2) hat man eine konsequentere und eine einheitlichere Konvention.... und das ist wichtig bei großen Entwicklungsprojekten. Ich persönlich finde große Frameworks (wie etwa das Springframework) in denen dies konsequent Umgesetzt worden ist leichter zu erlernen und anzuwenden.

Gruß Tom
 
@ Tom

Ich hab das mal bei Google gesucht :)

"Im Gegensatz zu lokalen Variablen stehen globale Variablen. Globale Variablen werden außerhalb der Funktionsdefinition deklariert. Sie haben außerhalb und innerhalb der Funktionsdefinition Gültigkeit."

Und so kenne ich das. Ist das falsch
 
Zuletzt bearbeitet:
Zurück