Gå til innhold

Bruk av "this." i klasser


Anbefalte innlegg

Heisann!

 

Jeg er relativt ny hva Java angår, men har endel programmeringserfaring. Lurer på en liten stilmessig sak:

 

Bruker man vanligvis this for å referere til private variabler i klasser, eller ungår man dette? Jeg pleier å bruke varNavn_ for å understreke at de er interne, og synes ofte this.varName_ blir noe rotetet. Hva er normalt innen profesjonel bruk? Finnes det en standard på dette?

 

Mvh,

- Knut

Lenke til kommentar
Videoannonse
Annonse

Først litt historie fra andre språk:

I Python er self (som det kalles) eksplisitt og MÅ brukes og legges ved som første parameter i metoden. I php brukes $this->varnavn for å referere til objektvariabler. I javascript brukes this for å referere til det globale objektet, som enten er nettleservinduet eller objektet.

 

I java derimot, antas det at du skal sette objektvariabler dersom du ikke bruker this-variabelen og det i tillegg ikke eksisterer en lokal variabel med samme navn. Så med andre ord, du trenger bare this.variabelnavn i tilfeller som dette:

 

public class Test{
  private int someVal;
  private double someOtherVal;

  public void doSomething(int someVal, double otherValue) {
//her trenger du ikke this. fordi du har ingen lokale variabler
//kalt someOtherVal
 someOtherValue = otherValue;
//her må du brukes this, for ellers setter du en lokal variabel
 this.someVal = someVal;

  }
}

Noen liker å kalle variabler i en metode for feks startSomeVal for å unngå denne problematikken, noen velger å legge på en underscore (int someVal_), mens andre liker å bruke this-konsekvent.

 

Jeg er for den siste, ved å bruke this eksplisitt, men dette har jeg en følelse av at mange i javaverdenen ugleser. Det har kanskje noe med min Python-bakgrunn å gjøre ;)

 

 

edit: må bare påpeke at this kan peke til både public, private og protected objektvariabler

Endret av dabear
Lenke til kommentar
Heisann!

 

Jeg er relativt ny hva Java angår, men har endel programmeringserfaring. Lurer på en liten stilmessig sak:

 

Bruker man vanligvis this for å referere til private variabler i klasser, eller ungår man dette? Jeg pleier å bruke varNavn_ for å understreke at de er interne, og synes ofte this.varName_ blir noe rotetet. Hva er normalt innen profesjonel bruk? Finnes det en standard på dette?

 

Mvh,

- Knut

 

Noen ganger man bruke this, for eksempel når instansvariabler og parametervariabler har det samme navnet:

 

public class Test {
 private int foo;

 public Test(int foo) {
this.foo = foo;
 }
}

 

Jeg kan ikke huske å ha sett bruken av this nevnt i noen kodestandard. Jeg synes at bruken av this er opp til den enkeltes smak og behag. Personlig bruker jeg det alltid. Noen vil sikkert synes det er rotete...

 

Ellers burde det ikke være noen grunn til å postfixe variabelnavn med underscore, for å understreke at de er interne. I tråd med god OOP-skikk er variabler et internt anliggende i klasser, og ikke noe som noe på utsiden burde aksessere.

 

Edit: Doh! Mens jeg satt og skrev dette har noen sneket seg til å komme med et briljant svar allerede. ;)

 

Werner

Endret av wernie
Lenke til kommentar
Heisann!

 

Jeg er relativt ny hva Java angår, men har endel programmeringserfaring. Lurer på en liten stilmessig sak:

 

Bruker man vanligvis this for å referere til private variabler i klasser, eller ungår man dette? Jeg pleier å bruke varNavn_ for å understreke at de er interne, og synes ofte this.varName_ blir noe rotetet. Hva er normalt innen profesjonel bruk? Finnes det en standard på dette?

 

Mvh,

- Knut

Ja, det finnes en standard. Se Code Conventions for the JavaTM Programming Language.

Endret av Frank2004
Lenke til kommentar
  • 2 uker senere...

Frank2004: Leste standarden, den nevner ikke hvordan man kaller variabler i klassen..

 

Jeg for min del fortsetter standarden min fra PHP. this.var for alle variabler i klassen, så unngår man misforståelser, og mulige mess-ups den dagen man kaller en ny variabel det samme som en som allerede fins (selv om jeg synes det er en ganske dårlig vane fra før).

Lenke til kommentar
this.var for alle variabler i klassen
Stygt og hemmer lesbarheten
så unngår man misforståelser
Nei, man blir blind for this.
og mulige mess-ups den dagen man kaller en ny variabel det samme som en som allerede fins
I Java vil du få en advarsel når du prøver å redeklarere den, med mindre det er i en ny metode du lager, men da skriver du jo hele koden fra begynnelsen, og da teller ikke hvor vidt du har brukt this eller ikke tidligere.

 

Uansett, for å øke lesbarheten, unngå misforståelser og mess-ups, følg konvensjonene. Av alle de Java-klassene jeg har sett fra Sun, Google og Apache har ikke this. vært brukt eksplisitt med mindre det er absolutt nødvendig. Dessuten er bug som er forårsaket av dette ganske lett å finne, og desto lettere å fikse.

Lenke til kommentar
at this. er stygt, hemmer lesbarheten, er jeg likevel uenig i. Jeg greier faktisk ikke se hvorfor å være eksplisitt minker lesbarheten.
Det er kanskje bare en vanesak, men når man skriver mye kode blir man fort lei av at 50% av koden faktisk er gjentakende "this.". I tillegg blir man selvsagt lei av å skrive this. hver gang man skal referere til en feltvariabel, slik at man vurderer å ha det på utklippstavlen og trykke Ctrl-v hver gang man skal referere til en slik.

 

Og hvis man bruker Ctrl-v ofte bør man revurdere kodestilen sin.

 

Jeg vet ikke hvor mye kode folk her inne skriver, men etter noen tusen linjer blir man nok lei.

 

Jeg skjønner ærlig talt ikke problemet heller, kan noen gi meg et eksempel på en metode som tar inn så mange parametre som kræsjer med feltvariabler at det er noe problem? Det ofteste er jo vanlige settere, og da er det temmelig åpenbart når man bruker this (pluss at kompilatoren klager hvis man gjør noe feil).

Lenke til kommentar
Frank2004: Leste standarden, den nevner ikke hvordan man kaller variabler i klassen..

Trådstarter hadde åpenbart ikke hørt om standarden i det hele tatt, med tanke på hvordan han/hun strør rundt seg med underscores.

Og hvis du leser standarden nøye nok, så kan du ihvertfall finne et eksempel på kode som refererer til instansvariabler. Denne er selvsagt uten "this", som kun brukes når det er nødvendig.

 

PS: hvis det er uklart hva som er lokale- og hva som er instansvariabler, så er det kanskje på tide å skrive om koden sin litt..?

Lenke til kommentar

Opprett en konto eller logg inn for å kommentere

Du må være et medlem for å kunne skrive en kommentar

Opprett konto

Det er enkelt å melde seg inn for å starte en ny konto!

Start en konto

Logg inn

Har du allerede en konto? Logg inn her.

Logg inn nå
  • Hvem er aktive   0 medlemmer

    • Ingen innloggede medlemmer aktive
×
×
  • Opprett ny...