Archief - [Java] Gebruik van this

Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.

Curahee Q

Legacy Member
Is dit eerder een voorkeur om dit te gebruiken? Zoals bijvoorbeeld dit voorbeeld

Code:
public class Naam {
	private String $voornaam;
	private String $achternaam;

	public Naam(String voornaam, String achternaam) {
		$voornaam = voornaam;
		$achternaam = achternaam;
	}
}

Nu kan je echter ook zeggen

Code:
public class Naam {
	private String $voornaam;
	private String $achternaam;

	public Naam(String voornaam, String achternaam) {
		this.$voornaam = voornaam;
		this.$achternaam = achternaam;
	}
}

Graag wat verduidelijking.

Kemblin

Legacy Member
ik zou u variabelen niet met $ laten beginnen, dat is niet volgens de gangbare conventies.

Variable names are case-sensitive. A variable's name can be any legal identifier — an unlimited-length sequence of Unicode letters and digits, beginning with a letter, the dollar sign "$", or the underscore character "_". The convention, however, is to always begin your variable names with a letter, not "$" or "_".

Het gebruik van this is gewoon handig als je het huidige object nodig hebt. bvb

Code:
public class Naam {
	private String voornaam;
	private String achternaam;

	public Naam(String voornaam, String achternaam) {
		this.voornaam = voornaam;
		this.achternaam = achternaam;
	}
}

want dit

Code:
public class Naam {
	private String voornaam;
	private String achternaam;

	public Naam(String voornaam, String achternaam) {
		voornaam = voornaam;
		achternaam = achternaam;
	}
}

gaat geen effect hebben.

Het wordt ook handig als je een functie oproept die dit object nodig heeft bvb

Code:
public class Naam {
	public boolean areEqual(Naam naam) {
		return naam.equals(this);  // je kan ook gewoon equals(naam) gebruiken maar je snapt mijn punt hopelijk.
	}
}

Er zijn dus verschillende toepassing van this. Het klopt wel dat het gebruik van this soms overbodig is en het enkel ter verduidelijking wordt gebruikt...

Curahee Q

Legacy Member
Ja inderdaad, gebruik ze vooral als mijn membervariabele dezelfde naam hebben als mijn parametervariabele.

Maar is het aangewezen om this altijd te gebruiken of maakt dat niet zoveel uit en is dat eerder je eigen 'stijl'?

Ik had eens ergens tegengekomen dat ze member variable dikwijls met een $ laten beginnen om zo het onderscheid goed te kunnen zien. Dezelfde reden als waarom ze constante met hoofdletters schrijven. En ik moet zeggen, het helpt echt wel om een duidelijk verschil te zien tussen lokale en member variabele.
Iemand die hier meer van kan zeggen of heb ik het gewoon 100% mis...

forloRn_

Legacy Member
Ik heb eerlijk gezegd nog nooit een $ in een identifier gezien in Java.

Een goede IDE zal members en lokale variabelen een ander kleurtje geven; dat zou voldoende moeten zijn. Als je echt het onderscheid niet meer kunt maken, zou ik eerder eens aan refactoren denken in plaats van overal van die lelijke dollartekens te zetten.

Curahee Q

Legacy Member
Is eclipse dan een slechte IDE? Want die geeft aan mijn membervariabele geen speciale kleur :D.

Refactoring is toch opschonen van code? Dus meer dingen opsplitsen en dergelijke? Het is niet dat ik het echt niet meer zag, het was meer een extra hulpmiddel, net zoals hoofdletters bij constanten. En ik vind die $-tekens niet lelijk, maar dat kan zijn omdat ik ze gewoon ben van PHP.

forloRn_

Legacy Member
Eclipse geeft mijn member-variabelen een blauw kleurtje hoor.

En Java != PHP. Je doet wat je wilt natuurlijk, maar als andere Java-programmeurs je code gaan bekijken, is het eerste wat ze zullen vragen: "what the fuck doen die dollartekens daar?"

Daedie

Legacy Member
renamen van functies en variabelen ten voordele van leesbaarheid valt ook onder refactoring ;).

Maar ivm uw dollars. Ge kunt ook iedere variabele met hoofdletter laten beginnen, maar ben zeker dat ge dat ook niet doet. Omdat dat tegen de conventies is. Voor die dollars geldt hetzelfde eigenlijk.

Weet niet precies wat de conventies zijn in java ivm member variabelen, in C++ wordt nogal eens m_ voor de variabele gezet, maar denk niet dat ze dat in java doen.

Curahee Q

Legacy Member
Nu je het zegt, heb al een tijdje niet meer geprogrammeerd met examens. Ze zijn inderdaad blauw, dacht even dat hij ze ook aan lokale vars gaf.

@forloRn_: Nee ik haal ze wel weg, ik wil gewoon mijn mening geven waarop jullie dan weer die van jullie kunnen geven. Zo gaat een discussie nu eenmaal ;). En mijn moto is "knowledge is power", dus discussies op dit gebied zijn in mijn ogen bevorderend voor in eerste instantie mij en ook voor andere (misschien wel beginnende) programmeurs.

Gurdt

Legacy Member
Enkele proffen bij ons geven membervariabelen altijd aan met "m_" of "$". Het valt vooral op dat ze bij java kiezen voor "$" wat ik zelf heel leesbaar vindt.
Die conventies zijn mss afhankelijk van bedrijf tot bedrijf?

Die proffen wat bij ons "$" gebruiken werken doorgaans op het EDM (Expertisecentrum voor Digitale Media) dus ik denk niet dat het fout is om "$" te gebruiken :)

Over die "this", het zal er altijd vanaf hangen wat je hoort te doen volgens de bedrijfsconventies/teamregels/...
Het is zeker niet fout en ik vind het wel lekker leesbaar ;)

Jerre Muesli

Legacy Member
Variabelen met $ laten beginnen in Java vind ik wel echt een vreemd idee.
Het heeft geen enkele toegevoegde waarde qua leesbaarheid (integendeel) en het lijkt dan of je PHP verward met Java ofzo.

The convention, however, is to always begin your variable names with a letter, not "$" or "_". Additionally, the dollar sign character, by convention, is never used at all. You may find some situations where auto-generated names will contain the dollar sign, but your variable names should always avoid using it.

Curahee Q

Legacy Member
Ik denk dat ik het ook van u heb Gurdt, wat betreft die '$'-tekens. Had het ergens hier op 9lives in een topic gelezen.

Nu bij ons op school gebruiken ze in c++ voor parameters ook wel eens een _

voorbeeld (rechtstreeks van een oplossing van de prof)
Code:
Naam::Naam(string _voornaam, string _achternaam) {
	voornaam = _voornaam;
	achternaam = _achternaam
}

Gurdt

Legacy Member
Natuurlijk daar is niets mis mee, het draait em allemaal om conventies :) en PHP met Java verwarren? Omdat je "$" gebruikt??
Dat is toch ook gewoon leesbaar :) Da valt op, zo zie je snel de membervariabelen, net als bij "m_" maar dat vind ik persoonlijk lelijk ogen xD

Curahee Q

Legacy Member
Ja ik zie ook niet in waarom je php met java zou verwarren omdat je er een $ aan toevoegd, zo kan je wel alles gaan vergelijken.

Ben er nog niet goed uit hoe ik het ga doen.

Jerre Muesli

Legacy Member
Iedereen doet wat hij wil natuurlijk maar moest ik van een collega java code krijgen vol dollar tekens dan zou mijn eerste reactie een serieuze WTF zijn, gevolgd door een vreemd gevoel van 'hopelijk heeft hij wat skill en mag ik zijn code straks niet helemaal herschrijven'.

Het geeft me zo'n gevoel dat iemand zijn eerste stapjes in Java zet. En waarschijnlijk is het dan ook zo want anders kende hij vast de java conventions.

Maar we gaan weer naar een convention discussie dus ik ga m'n muil houden :) sommige vinden ze belangrijk, anderen zien er het nut niet van in

Curahee Q

Legacy Member
Ja ik ben ook wel iemand die redelijk strict is in zijn conventies, heb ze dan ook al allemaal uit mijn code gehaald. En je moet zeker je mond niet houden x3xk3, het is een discussie voor iets en zo leert iedereen nog wat bij.

NeverwinterX

Legacy Member
Om terug op je oorspronkelijke vraag te komen over de this. Naast wat Kemblin al zei, is het soms handig/beter leesbaar om this te gebruiken zodat meteen het verschil duidelijk is tussen een gewone lokale variable of een member variable of het verschil tussen een gewone methode of een static methode.
Je kan als je dat wilt trouwens in Eclipse een optie aanzetten om automatisch de this overal bij te zetten als je savet:
window - preferences - java - editor - save actions
vink additional actions aan
klik op configure
bij de tab member accesses: use 'this' qualifier for ... 2 keer aanvinken
Je kan daar ook allerlei andere handige dingen aanzetten. Automatisch format source code als je savet, vind ik erg handig.

Gurdt

Legacy Member
x4xk3 zei:
Het geeft me zo'n gevoel dat iemand zijn eerste stapjes in Java zet. En waarschijnlijk is het dan ook zo want anders kende hij vast de java conventions.

Toch wel heel vreemd dat er proffen aan de Universiteit Hasselt en het EDM zijn die zo schrijven ;) maarja, die proffen zullen waarschijnlijk hun eerste stapjes java zetten :ironic:

MiniJeffrey

Legacy Member
Gurdt zei:
Toch wel heel vreemd dat er proffen aan de Universiteit Hasselt en het EDM zijn die zo schrijven ;) maarja, die proffen zullen waarschijnlijk hun eerste stapjes java zetten :ironic:

Ja want proffen zijn de besten... De java-'regeltjes' zijn toch wel duidelijk hoor op dat gebied en ja natuurlijk ben je nog altijd vrij om te zetten wat je wil, maar zoals iemand hier al zei:

Als ik een stuk code zou krijgen en ik zie alle variabelen beginnen met $ zou ik ook denken van 'jah die komt net uit een php-cursus gewandeld en zet wss zen eerste stappen in Java'.

KenSpectre

Legacy Member
Gurdt zei:
Toch wel heel vreemd dat er proffen aan de Universiteit Hasselt en het EDM zijn die zo schrijven ;) maarja, die proffen zullen waarschijnlijk hun eerste stapjes java zetten :ironic:

Bij ons in de Xios hameren ze op de conventions en $ ben ik daar nog niet tegengekomen.
Een _ daarentegen zoals eerder vermeld wel. (_voornaam) en dan voornaam = _voornaam;

Na wat opzoekwerk: de '$' is wel degelijk toegelaten maar word algemeen nooit gebruikt :)
Het is dus niet fout, maar programmeurs gebruiken het in het algemeen niet.
Het archief is een bevroren moment uit een vorige versie van dit forum, met andere regels en andere bazen. Deze posts weerspiegelen op geen enkele manier onze huidige ideeën, waarden of wereldbeelden en zijn op sommige plaatsen gecensureerd wegens ontoelaatbaar. Veel zijn in een andere tijdsgeest gemaakt, al dan niet ironisch - zoals in het ironische subforum Off-Topic - en zouden op dit moment niet meer gepost (mogen) worden. Toch bieden we dit archief nog graag aan als informatiedatabank en naslagwerk. Lees er hier meer over of start een gesprek met anderen.
Terug
Bovenaan