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.
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
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 :-)
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.
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 :-)
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 :-)
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.
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
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.
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.
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)
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.
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."
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.
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 :-)
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 :-)
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
Synes godt om
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
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.
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.
"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.
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.