Hoe moet men woorden scheiden in pakketnamen? Welke van de volgende zijn correct?
com.stackoverflow.my_package
(Snake Case
met underscore)com.stackoverflow.my-package
(Kebab Case
met koppeltekens)com.stackoverflow.mypackage
(Camel Case
)com.stackoverflow.mypackage
(Pascal Case
)
Wat is de algemene norm?
Antwoord 1, autoriteit 100%
Alle drie zijn niet de conventies.
Gebruik com.stackoverflow.mypackage
.
De pakketnamen volgen geen kameelomhulsel of onderstrepingstekens of koppeltekens pakketnaamgeving conventie.
Ook Google Java Style Guidespecificeert precies hetzelfde (dwz com.stackoverflow.mypackage
) conventie:
5.2.1 Pakketnamen
Pakketnamen zijn allemaal kleine letters, met opeenvolgende woorden eenvoudig aaneengeschakeld (geen onderstrepingstekens). Bijvoorbeeld
com.example.deepSpace
, nietcom.example.deepSpace
ofcom.example.deep_space
.— Google Java-stijlgids: 5.2 Regels per id-type: 5.2.1 Pakketnamen.
Antwoord 2, autoriteit 82%
Dit is wat het officiële document met naamconventies voorschrijft:
Pakketten
Het voorvoegsel van een unieke pakketnaam wordt altijd geschreven in kleine ASCII-letters en moet een van de top-level domeinnamen zijn, momenteel
com
,edu
,gov
,mil
,net
,org
, of een van de Engelse tweeletterige codes die landen identificeren zoals gespecificeerd in ISO-norm 3166, 1981.Vervolgcomponenten van de pakketnaam variëren volgens de interne naamgevingsconventies van een organisatie. Dergelijke conventies kunnen specificeren dat bepaalde directorynaamcomponenten divisie-, afdelings-, project-, machine- of loginnamen zijn.
Voorbeelden
com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
Referenties
Houd er rekening mee dat in het bijzonder alles wat volgt op het domeinvoorvoegsel op het hoogste niveau niet wordt gespecificeerd in het bovenstaande document. Ook de JLS stemt hiermee in door de volgende voorbeelden te geven:
com.sun.sunsoft.DOE
gov.whitehouse.socks.mousefinder
com.JavaSoft.jag.Oak
org.npr.pledge.driver
uk.ac.city.rugby.game
Het volgende fragment is ook relevant:
In sommige gevallen is de internetdomeinnaam mogelijk geen geldige pakketnaam. Hier zijn enkele voorgestelde conventies om met deze situaties om te gaan:
- Als de domeinnaam een koppelteken of een ander speciaal teken bevat dat niet is toegestaan in een identifier, zet u deze om in een onderstrepingsteken.
- Als een van de resulterende componenten van de pakketnaam trefwoorden zijn, voeg er dan een onderstrepingsteken aan toe.
- Als een van de resulterende pakketnaamcomponenten begint met een cijfer, of een ander teken dat niet is toegestaan als initieel teken van een identifier, wordt er een onderstrepingsteken voor de component geplaatst.
Referenties
Antwoord 3, autoriteit 9%
Iedereen kan underscore _gebruiken (het is oké)
Niemand mag hype gebruiken –(het is een slechte gewoonte)
Niemand mag hoofdletters gebruiken in pakketnamen (slechte gewoonte)
OPMERKING: hier is “Bad Practice” bedoeld voor technisch gezien mag je dat gebruiken, maar conventioneel is het niet op een goede manier om te schrijven.
Bron: Een pakket een naam geven(docs.oracle)
Antwoord 4, autoriteit 6%
De officiële naamgevingsconventies zijn niet zo strikt, ze ‘verboden’ zelfs de notatie van kameelgevallen niet, behalve het voorvoegsel (com
in uw voorbeeld).
Maar persoonlijk zou ik hoofdletters en koppeltekens, even cijfers, vermijden. Ik zou com.stackoverflow.mypackage
kiezen zoals Bragboy ook voorstelde.
(afbrekingen ‘-‘ zijn niet legaal in pakketnamen)
BEWERKEN
Interessant – de taalspecificatie heeft ook iets te zeggen over naamgevingsconventies.
In Hoofdstuk 7.7 Unieke pakketnamenwe zien voorbeelden met pakketnamen die uit hoofdletters bestaan (dus CamelCase-notatie zou OK zijn) en ze stellen voor om hyphonation te vervangen door een underscore (“mary-lou” -> “mary_lou”) en java-trefwoorden te prefixen met een underscore ( “com.voorbeeld.enum” -> “com.voorbeeld._enum”)
Enkel meer voorbeelden van hoofdletters in pakketnamen zijn te vinden in hoofdstuk 6.8.1 Pakketnamen.
Antwoord 5, autoriteit 2%
Onderstrepingstekens zien er lelijk uit in pakketnamen. Voor wat het waard is, in het geval van namen die zijn samengesteld uit drie of meer woorden, gebruik ik initialen (bijvoorbeeld: com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo
) en documenteer vervolgens het doel van het pakket in package-info.java
.
Antwoord 6
Aaneenschakeling van woorden in de pakketnaam is iets wat de meeste ontwikkelaars niet doen.
Je kunt zoiets gebruiken.
com.stackoverflow.mypackage
Raadpleeg JLS-naamverklaring