Wat is de conventie voor woordscheidingsteken in Java-pakketnamen?

Hoe moet men woorden scheiden in pakketnamen? Welke van de volgende zijn correct?

  1. com.stackoverflow.my_package(Snake Casemet underscore)
  2. com.stackoverflow.my-package(Kebab Casemet koppeltekens)
  3. com.stackoverflow.mypackage(Camel Case)
  4. 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.deepSpaceof com.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 (comin uw voorbeeld).

Maar persoonlijk zou ik hoofdletters en koppeltekens, even cijfers, vermijden. Ik zou com.stackoverflow.mypackagekiezen 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

Other episodes