Du må være registrert og logget inn for å kunne legge ut innlegg på freak.no
X
LOGG INN
... eller du kan registrere deg nå
Dette nettstedet er avhengig av annonseinntekter for å holde driften og videre utvikling igang. Vi liker ikke reklame heller, men alternativene er ikke mange. Vær snill å vurder å slå av annonseblokkering, eller å abonnere på en reklamefri utgave av nettstedet.
  6 788
Kodeeksempel i python:

Kode

class MyClass(object):
  def __init__(self, x)
    self.value = 5 * x

  def getValue(self):
    return self.value

Per = MyClass(2)
#1
print "Value is ", Per.getValue()

#2
print "Value is ", Per.value
Har forstått det slik at #1 er best practice, men kan noen forklare meg hvorfor? Har søkt en god stund nå uten å resultat.
Poenget er at klassen din skal ha et API som fungerer slik at selv om du endrer ting internt i klassen, skal API-et som brukes i utenforstående kode fungerende.

La oss si du f.eks. har en 2D vektor hvor vinkelen er lagret i radianer, men i senere tid bestemmer du deg av en eller annen grunn at det er mest praktisk å lagre verdien i grader i stede for radianer. Om du da henter du verdien direkte vil kode som forventer å få ut verdien i radianer slutte å fungere, mens om du hadde et API kan du endre get-funksjonen til å regne om verdien fra grader til radianer og returnere denne, og dermed ikke påvirke utenforstående kode.

Husk at noe av poenget med klasser er å abstrahere ting, og at det er meningen at en person som bruker en klasse ikke skal trenge å tenke på hvordan ting fungerer internt i klassen.
Nå skal det sies at endel "best practice"-regler overhodet ikke er "best practice" på småprosjekt. Dette er en av dem.

Jo større prosjektet blir dog, jo viktigere er det å kunne sørge for å forandre på ting i koden et sted uten at du bryter noe et annet sted. Fra middels-store (lengre ennmansprosjekt f.eks) og oppover blir det helt essensielt.
Et annet poeng er at i en del språk har du forskjellige muligheter til inndelinger av variabler og funksjoner i klassene via access modifiers, hvor de vanligste er public, private og protected. Normalt vil du ikke at andre klasser skal ha full tilgang til vilkårlig lesing og skriving av klassens interne variabler, og derfor er det vanlig å sette variablene som private (eventuelt protected, hvis du ønsker at subklasser skal ha tilgang til baseklassens variabler), og benytte public setters og getters for å lese og skrive på klassens egne vilkår.

Men jeg er enig med DumDiDum i at man bør vite hvorfor noe er best practice, slik at man kan avvike fra det hvis det skulle være fornuftig. Om akkurat dette tilfellet er en god anledning for å avvike fra akkurat dette synes jeg derimot er umulig å si med mindre man vet nøyaktig hva klassene skal gjøre, hvordan du eventuelt har lagt opp arv, hva slags språk det er snakk om osv. I tillegg er det i min erfaring ofte slik at private programmeringsprosjekter utvides noe etterhvert som man driver med de, og at avvik fra best practice da ofte kan slå tilbake – men det er selvsagt også et spørsmål om god planlegging. Men altså, er prosjektet knøttlite kan du nok like gjerne gi direkte tilgang.
Sist endret av Provo; 18. april 2011 kl. 10:42.
Dei ovan dekkjer det meste som gjeld, men eg kan nemne på si at det er gjengs å nytte @property for klassevariabelstyring.
1. d4
steili's Avatar
Trådstarter
Dette gir mening. Ser ikke helt ulempene med å benytte en slik funksjon, så da bruker jeg det likevel, selv om prosjektet mitt er såpass lite at det absolutt ikke er essensiellt med noe slikt Jeg skal kikke på @property uppdali.
Sitat av steinarlima Vis innlegg
Dette gir mening. Ser ikke helt ulempene med å benytte en slik funksjon,
Vis hele sitatet...
Mange, mange flere kodelinjer på enkle klasser og dermed lavere lesbarhet. Lesbarhet og at det er lett å få oversikt er egenskaper som er ekstremt viktige i større prosjekt.

De beste koderene jeg har sett klarer å lage såpass pen, ryddig og oversiktlig kode at dokumentasjon knapt er nødvendig, bare ved å lage klasseoppdelinger og funksjoner som vel, makes sense. Når du skal utvide og fortsette på koden blir det øyeblikkelig åpenbart hvilken kode som burde ligge hvor. De verste jeg har sett følger aller best practice guidelinesene, men ender opp med svære monster av uhåndterlige klasser med +50 linjer med get/set metoder og utydelige ansvarsforhold.

Sånn generelt er jeg ingen ekstreme programming fantast, men refaktorering (flytte og fikse på kode i etterkant) fungerer faktisk forbausendes bra nå. Koder du først, og fikser designet etterpå så har du en mye, mye bedre oversikt og følelse over hvor koden burde ligge og hvilke abstraksjoner som sparer deg for arbeid.