Avatar billede codemon Nybegynder
04. oktober 2002 - 16:10 Der er 23 kommentarer og
4 løsninger

NavngivningsKonventioner

Findes der klare regler for navngivning af sammensatte navneord i java, fx:

kundesøgevindue, kundeSøgeVindue, kundesøgeVindue.

Er det et eller flere ord og hvad hvis der er binde s i

navngivningsKonvention, navngivningKonvention, navngivningskonvention ...

evt. link eller reference til litteratur er særdeles velkommen.

/codemon
Avatar billede sago Nybegynder
04. oktober 2002 - 16:12 #1
Det er helt op til dig selv, men standard er "vist" at man starter med stort bogstav for nye ord. Jeg ville skrive kundeSøgeVindue. Med mindre det er en klasse, så ville jeg skrive med stort begyndelsesbogstav.
Avatar billede jakoba Nybegynder
04. oktober 2002 - 16:15 #2
såvit jeg kender dem:
konstanter:  ALLE bogstaver i navnet med stort.
    char BOGSTAV_NUL = 48;

klasser:  første bogstav med stort. flerleddede navne sammensættes uden underscore og med første bogstav i hvert led med stort.
    class KlasseTilAtBeregneAccelleration

pakker, metoder og variable:  første bogstav med lille, ellers som klasser.
    int vaiabelTilAtHuskeAntallet

mvh JakobA
Avatar billede codemon Nybegynder
04. oktober 2002 - 16:20 #3
jakoba dine eksempler er ikke sammensatte navneord, så her er det nemmere.

sago, jeg er netop interreseret i om det er op til en selv.

flere forslag: (problem ord)

kundegruppe, kundeGruppe
kontaktformer, kontaktFormer
databaseforbindelse, databaseForbindelse
Avatar billede hbhansen Nybegynder
04. oktober 2002 - 16:25 #4
Der er ingen "regler" i java for navngivning det er som sago siger helt op til dig selv, men god kodeskik siger dog de samme som både sago og jakoba :-)
Avatar billede jakoba Nybegynder
04. oktober 2002 - 16:29 #5
Nej jeg tror ikke du kan finde klare og entydige regler for brug af sammensatte navneord i Java.

en programmør der tænker på dansk vil skrive dem med kun forreste bogstav stort.
og en programmør der tænker på engelsk vil skrive hvert led med stort.

Jeg ville nok anbefale det sidste. det vil et flertal finde mest naturligt.
Avatar billede jakoba Nybegynder
04. oktober 2002 - 16:47 #6
hmm. mangler et svar.
Avatar billede bearhugx Nybegynder
04. oktober 2002 - 17:04 #7
Ligesom i dansk grammatik, behandles et sammensat navneord som ét ord... - Du skriver f.eks. ikke "PostKasse var tom"-- men "Postkassen var tom"

Tit kan det hjælpe at føre navneordet ind i en sætning, og så se, hvordan det ser ud --- i 99% af tilfældene vil det bemærkes med det samme, hvis man gør det forkert :-))

Dvs. at du vil skrive kundeSøgeVindue hvis du betragter det som tre ord ( navneord-verbum-navneord )

i tilfælde med f.eks. kundegruppe - så er det sammensat navneord - derfor behandles det som ét ord .. Dvs "kundegruppe" ...

betragt f.eks. også følgende
  kundegruppeSøgeDialog --  igen opbygningen navneord-verbum-navneord

men hvor det første navneord egenligt er to navneord, som så bare ser sammensat :-)

/Søren Munk Skrøder
Avatar billede bearhugx Nybegynder
04. oktober 2002 - 17:10 #8
i forbindelse med jacobas indlæg @ 04/10-2002 16:29:02, så skriver jeg også lige mit eksempel på engelsk for at vise, at det er de samme regler, som er gældende der...

  "The mailbox was empty" - og ikke "The mailBox was empty" ...

Sammenfatning :
det kommer alt i alt an på, om du betragter det som to separate navneord...
Hvis du betragter det som et sammensat ord, så skal der ikke skriftes case i mellem ledene - det skal betragtes som ét ord ... Hvis du derimod tænker det som 2 selvstændige navneord, som bare ligger ved siden af hinanden, så skal der bruges stort bogstav i mellem dem :-)

/Søren :-)
Avatar billede sago Nybegynder
04. oktober 2002 - 17:55 #9
Man skal vel bare skrive med stort der hvor man normalt ville have brugt mellemrum, hvis det var en sætning?

Jeg bruger nok store bogstaver for ofte... ;)
Avatar billede =maddog= Nybegynder
04. oktober 2002 - 17:56 #10
Hvert ORD skal med stort, og det indbefatter naturligvis også sammensatte ord. Problemet opstår ved 'hjemmegjorte' ord og ord med bindestreg (dem er der mange af på engelsk). Her tror jeg nok (uden at vil tage en kugle for det) at alle naturlige ord (ord man ville kunne anvende i normale sætninger uden panderynken) skal med stort. Så eksemplet kundesogevindue er strikket sammen af ordene kunde og sogevindue og navngives derfor KundeSogevindue som klasse og kundeSogevindue som variabel.
Avatar billede =maddog= Nybegynder
04. oktober 2002 - 17:57 #11
DuKanIkkeAnvendeStoreBogstaverNok,DenneSætningVarNæppeLæsbarUdenStoreBogstaver
Avatar billede jakoba Nybegynder
04. oktober 2002 - 18:02 #12
jeg kan godt lide bearhugs eksempel:
    kundegruppeSøgeDialog
for der har vi problemet i en nøddeskal. kundegruppe er også et sammensat ord.
og selv om det (læst på dansk) giver mulighed for tvivl om hvorvidt der menes en kundegruppe der leder, eller en kunde der søger efter grupper, vil jeg til hver en tid stave det som
    kundeGruppeSøgeDialog

mvh JakobA
Avatar billede =maddog= Nybegynder
04. oktober 2002 - 18:19 #13
her er jeg 100% med jakoba. man kan kun øge forståelsen med store bogstaver.
kundegruppesogedialog skal der en autist til at forstå. kundeGruppeSogeDialog og ikke en sjæl er i tvivl. formålet med konventionen må være at hindre obskur kode og misforståelser.
Avatar billede codemon Nybegynder
04. oktober 2002 - 18:52 #14
Jeg er glad for ikke at være den eneste der er i tvivl.

Umiddelbart så er der lavet nogle klasser med de sammensatte navneord - som er et ord i danske sætninger - lavet med små bogstaver.

Jeg vil dog sige at =maddoqs= og jakobas fremgangsmåder er det nemmeste, hvert ord med stort og man kommer aldrig i tvivl (om der skal stort bogstav eller lille, tilgængæld kan der måske være problemer med meningen med det)

Vi har i_hvert Fald nogle gange kommet til at blande det sammen forskellige steder og det vigtigste må vel være (når man selv kan bestemme) at det er ens overalt.

Med sammensatte enkeltord med lille, kræver det at man hele tiden tænker sig om. Jeg kan ikke så godt lide at tænke for meget, så måske skulle der tænkes i at lave det om.
Avatar billede bearhugx Nybegynder
04. oktober 2002 - 20:59 #15
I mit eksempel med kundegruppeSøgeDialog - så var kundegruppe all_lowercase, fordi jeg betragter en kundegruppe som en entitet - en gruppering af kunder.

Havde det været en gruppe, som havde en løs/svag sammenhæng med kunder, så ville jeg ikke havde betragtet det som et sammensat navneord - men som to navneord, som (tilfældigvis) er placeret ved siden af hinanden (to ligevægtige entiteter) - og så ville jeg også navngive med kundeGruppeSøgeDialog -

Jeg mener dog ikke, at man skal stile efter at alle bogstaver skal med stort (for enhver pris) -

derimod vil _jeg opfordre til det stik modsatte af hvad codemon nævner_ - nemlig at man skal tænker over, hvad man koder! - og det gælder både almindelige "gode, beskrivende navne" og at man koder, så man umiddelbart kan læse hvad der sker i koden (med alt hvad det indbefatter af store og små bogstaver)

/Søren :-)
Avatar billede cybermazedk Nybegynder
04. oktober 2002 - 22:13 #16
Min kommentar ligner nok meget hvad der er sagt, men:

Man kan som udgangspunkt stort set selv vælge. Men klasser starter altid med stort, det gør pakker, metoder og variable ikke. Dermed kan man nemt kende forskel, bare ved at kigge på navnet og dets kontekst.

Ved længere ord skriver man normalt alle ordene med stort, som:

public class DetteErEnKlasse {
}

Dog skal alle ord ikke være med stort, hvis man ser dem som sammensat, gør jeg ikke det.

public class EnStorBrandbil {
}

Da brandbil (der består af ordene brand og bil) her hører naturligt sammen som et ord, skriver jeg ikke med stort.

Om man synes ordene hænger sammen eller ej i de enkelte tilfælde er fuldstændig op til en selv. Bare man finder en måde man finder naturlig og bruger den konsistent.
Avatar billede bearhugx Nybegynder
04. oktober 2002 - 22:46 #17
cybermazedk >> helt enig --- brandbil synes jeg også er et super eksempel på, hvordan man faktisk behandler sammensate navneord som eet...

Jeg kom dog lige til at tænke på at man, på engelsk, tit ikke sammensætter navneord - men derimod bruger to (navne)-ord efter hinanden for at beskrive een entitet -- f.eks. "Fire Truck"

Hvor vi herhjemme omtaler en "kundegruppe" som en entitet og med et ord, så bruger engelsk to ord "Customer Group" til at beskrive den samme ene entitet...

Derfor så sker det tit, at når man læser engelsk kode, at de bruger store bogstaver ved næsten hver ny ordstamme... Det gør man derimod ikke i Danmark --- og derfor vil "dansk" kode også have en anden konvention, hvad angår store/små bogstaver end engelsk/international kode-konvention :-)

Så egenligt går der også ud på om man koder på dansk eller engelsk

Slutligt vil jeg citere cybermazedk, med dennes visdomsord, som rammer hovedet på sømmet :

"Om man synes ordene hænger sammen eller ej i de enkelte tilfælde er fuldstændig op til en selv. Bare man finder en måde man finder naturlig og bruger den konsistent."

/Søren Munk Skrøder
Avatar billede codemon Nybegynder
04. oktober 2002 - 23:45 #18
De sidste indlæg er rigtig gode. Brandbil og ikke BrandBil klart nok. Her er som sagt et godt eksempel på ikke stort bogstav i bil. Tak for det.

Kundegruppe er nok det samme. Det er let nok med normalt anvendte ord, men sværere med ord som man selv laver (som er sjældent brugt)

søgefelt, kundesøgefelt, kundeSøgefelt, den sidste må vel være den bedste ud fra de sidste indlæg.
Avatar billede =maddog= Nybegynder
05. oktober 2002 - 00:17 #19
sagen er at BrandBil kan forstås, men brandmandsexamenibrandbilskørsel kan sagtens misforståes, så selvom konventionen er KLAR og TYDELIG er det stadigvæk bedre at sætte et enkelt stort bogstav for meget end et for lidt.
Avatar billede bearhugx Nybegynder
05. oktober 2002 - 01:37 #20
maddog>>

nu er ord/sætninger som "brandmandsexamenibrandbilskørsel" heller ikke hvad der konkret tales om her -- Sådan som jeg har forstået det, så tales der primært om, hvordan man håndterer sammensatte navneord...

Dit eksempel har følgende opbygning
Nav - Nav - Nav - Pre - Nav - Nav - Nav
  hvor Nav = navneord 
    og Pre = Preposition

Så allerførst så må vi tage dit eksempel og skrive det derefter
  = brandmandseksamenIBrandbilskørsel

Ok -- Den blev lidt mere læselig -- men ikke helt alligevel :-/

Hvad kan man så gøre??? -- Ja - Man kan gå ind og se om der er nogle "del"-entiteter i de to ord : "brandmandseksamen" og "brandbilskørsel"

1 ord : Brandmandseksamen
Her er der to del-entiteter
  Brandmand og Eksamen  (prøv at bytte om - en brand og en mandeksamen????) :-)

Derfor ville det naturlige sted være at lade Eksamen være stavet med stort
  Dvs. brandsmandsEksamen

Det andet ord : brandbilskørsel
  Her er det vanskeligere at afgøre ....
Taler man om "en brand" og "bilskørsel" -- eller taler man om "brandbil" og "kørsel" ...

I mit hoved ville jeg vælge den sidste - primært fordi en brandbil har mere med domæneområdet at køre end en generisk "bilkørsel"

Derfor - hvis der absolut _skal_ være stort bogstav et eller andet sted, så vil jeg foreslå ved Kørsel

  Dvs. brandbilsKørsel

Derved vil vores (lange) metode/attribut/klasse komme til at hedde

  brandmandsEksamenIBrandbilsKørsel -- let at læse    og evt.
  brandmandsEksamenIBrandbilskørsel

-----

Dog vil jeg undre mig, hvis jeg bliver nød til at bruge 7 ord til at sammensætte et sigende navn for en metode/attribut/klasse... De fleste sammensætter med 2-4 ord - 5 hvis det går vildt for sig :-)


/Søren Munk Skrøder
Avatar billede jakoba Nybegynder
05. oktober 2002 - 02:27 #21
når vi laver navne er der flere grunde til det:
1) en husketeknisk hjælp til at forstå den variabel/metode/pakke/... der får det navn
2) noget der et nemmere at huske og bruge end v001, v002, v003, v004, ...
3) noget der kan kommunikeres til andre i projektet så DE kan bruge det.

og skønt 1) er vigtig er det ikke den eneste faktor der skal tilgodeses. Så selvom loebeTellerForGennemgangAfArrayetKundegrupper nok er et superduper navn for den variabel, så kalder jeg nu alligevel tællevariablerne i mine forløkker for i, j, k, osv.

og 3) har også et ord at skulle have sagt; en af de hyppigste interne kommunikationer i et projekthold er "hey ole, hvad hedder den der metod der...", hvortil ole svarer "den hedder brandbilsKundegruppe, Kevin", og så skal Kevin helst kunne parse det ord og skrive det rigtigt uden for mange forsøg.

Jo fastere en regel vi kan lave jo bedre chancer har han. Og dansk som modersmål skal nødig være et kriterie for Kevin kommer ofte fra Irland, Kuwait, Sverige eller et andet udland. Eller også er han bare ung. Fler og fler unge deler ord der før var sammensatte.

Så jeg holder stædigt på mit. stort B i brandBil. Det er en regel simpel nok til at den kan bruges konsistent.

Og en endnu fastere regel: "Aldig to navne hvor den eneste forskel er hvad der står med store bogstaver", hvis der er en klasse der hedder AlienShip må der ikke være en variabel der hedder alienShip. så er der en chance for at vi kan hitte ud af det :-)

mvh JakobA
Avatar billede cs_henrik Nybegynder
05. oktober 2002 - 03:02 #22
Jeg forstår ikke hvordan denne diskussion er blevet så omfattende som den er.

Jeg er meget uenig i bearhugx opfattelse der lyder: "Om man synes ordene hænger sammen eller ej i de enkelte tilfælde er fuldstændig op til en selv. Bare man finder en måde man finder naturlig og bruger den konsistent."

Det hele handler om, hvorvidt navneordene er sammensatte eller ej. Hvis man skriver på dansk, er et ord som "brandbil" et sammensat navneord, som i Java ville hedde "Brandbil", hvis det var en klasse. Hvis det var på engelsk ville man skrive "FireTruck", idet det her er delt i to ord.

Jeg ser ingen grund til at opfinde egne regler, der tager udgangspunkt i en meget subjektiv vurdering når vi har en grydeklar opskrift på, hvordan det skal gøres. Faktisk ser jeg det som et udtryk for, at danskere har umådeligt svært ved at håndtere sammensatte navneord.

Mvh. Henrik
Avatar billede Slettet bruger
05. oktober 2002 - 09:18 #23
Sun har et komplet sæt kodekonventioner for Java på:
http://java.sun.com/docs/codeconv/
Code Conventions for the JavaTM Programming Language

Den burde kunne svare på dit spørgsmål.
Avatar billede cybermazedk Nybegynder
05. oktober 2002 - 09:54 #24
Fint link blackadder, men det bekræftede faktisk kun mig i, at jeg følger reglerne korrekt :D

Om navngivning af klasser fra linket:
"Class names should be nouns, in mixed case with the first letter of each internal word capitalized. Try to keep your class names simple and descriptive. Use whole words-avoid acronyms and abbreviations (unless the abbreviation is much more widely used than the long form, such as URL or HTML)."

Men det er jo det vi har sagt. "with the first letter of each internal word capitalized". Første bogstav i hvert interne ord, skal være med stort. Dog vil jeg så holde på, at det på dansk hedder KlasseBrandbil, da brandbil er ET ord på dansk. Skriver man på engelsk, er det naturligvis FireTruck, da det er 2 ord.

Og man skal gøre det kort. Der er jeg helt enig. Nogen af de meget lange eksempler jeg har set I har lavet, er helt urealistiske. 2-3 ord kan stort set altid på en fornuftig måde beskrive klassen, metoden, attributten. Især i samspil med sine packages.

jacoba:" Og en endnu fastere regel: "Aldig to navne hvor den eneste forskel er hvad der står med store bogstaver", hvis der er en klasse der hedder AlienShip må der ikke være en variabel der hedder alienShip. så er der en chance for at vi kan hitte ud af det :-)"

Uenig. Man er aldrig i tvivl om det er en klasse, attribut eller metode man skal have fat i. Og man kan ikke komme til at tage fejl. alienShip er en attribut. Alienship er en klasse og alienShip() er en metode. Det er da umuligt at tage fejl.
Avatar billede jakoba Nybegynder
05. oktober 2002 - 10:13 #25
OK. men kik lige på de to steder du skriver alienship. som klassenavn fik det stort A og lille s, dom funktion filk det lille a og stort S.

Brugen af store bogstaver er et sted hvor vi skal regne med at vi vil lave fejl.
OG hvis vi har:
      int alienship = 25;
samtidigmed at der et andet sted står
      int alienShip = 50;
er den fejl lumsk nok til at den måske først bliver fundet hos kunden (efter der er afsluttet regnskab et par gange). Det kan være ret dyrt.

mvh JakobA
Avatar billede cybermazedk Nybegynder
05. oktober 2002 - 12:33 #26
Klassen skulle naturligvis være AlienShip.

"int alienship = 25;
samtidigmed at der et andet sted står
int alienShip = 50;"

Det er ufattelig ringe programmering hvis det lader sig gøre. Class scope variable er listet under hinanden lige under class definitionen. Og det burde være umuligt at lave de 2 variable i klassen uden at man opdager sin egen fejl. Det er hvad jeg vil kalde sjusk.

Det skal simpelthen være SÅ ringe, hvis man laver sådan en fejl. Man bruger de systemudviklingsdokumenter man har. Og der bør mindst være et klassediagram med attributter og metoder, så det virker helt usandsynligt at man kan lave SÅ elementær en fejl. Ydermere skal man bruge den ene varibel i get metoden og den anden i set metoden for ikke at få det samme ind og ud af klassen. Og benytter man de 2 variable i en metode der udregner noget, BØR man simpelthen opdage forskellen ...

Min pointe er, at så elementær fejl bør ingen lave. Det er direkte sjusk eller dårlige/manglende systemudviklings/programmeringsviden.

Det er SÅ let at undgå ...
Avatar billede codemon Nybegynder
06. oktober 2002 - 13:49 #27
codemon takker
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester