Qual è la convenzione per il separatore di parole nei nomi dei pacchetti Java?

Come dovrebbe una parola separata nei nomi dei pacchetti? Quale delle seguenti sono corrette?

  1. com.stackoverflow.my_package (carattere di sottolineatura)
  2. com.stackoverflow.my-package (trattini)
  3. com.stackoverflow.MyPackage (CamelCase)

Qual è lo standard generale?

Ecco cosa prescrive il documento delle convenzioni di denominazione ufficiale:

Pacchetti

Il prefisso di un nome di pacchetto univoco è sempre scritto in lettere ASCII minuscole e dovrebbe essere uno dei nomi di dominio di livello superiore, attualmente com , edu , gov , mil , net , org o uno dei codici a due lettere inglesi paesi di identificazione come specificato nella norma ISO 3166, 1981.

I componenti successivi del nome del pacchetto variano in base alle convenzioni di denominazione interne di un’organizzazione. Tali convenzioni potrebbero specificare che determinati componenti del nome della directory siano nomi di divisione, reparto, progetto, macchina o login.

Esempi

  • com.sun.eng
  • com.apple.quicktime.v2
  • edu.cmu.cs.bovik.cheese

Riferimenti

  • java.sun.com – Convenzioni del codice / Denominazione

Si noti che, in particolare, tutto ciò che segue il prefisso del dominio di primo livello non è specificato dal documento precedente. Il JLS concorda anche con questo dando i seguenti esempi:

  • com.sun.sunsoft.DOE
  • gov.whitehouse.socks.mousefinder
  • com.JavaSoft.jag.Oak
  • org.npr.pledge.driver
  • uk.ac.city.rugby.game

Anche il seguente estratto è pertinente:

In alcuni casi, il nome di dominio Internet potrebbe non essere un nome di pacchetto valido. Ecco alcune convenzioni suggerite per affrontare queste situazioni:

  • Se il nome di dominio contiene un trattino o qualsiasi altro carattere speciale non consentito in un identificatore, convertirlo in un carattere di sottolineatura.
  • Se uno qualsiasi dei componenti del nome del pacchetto risultante sono parole chiave, aggiungere un trattino di sottolineatura.
  • Se uno qualsiasi dei componenti del nome del pacchetto risultante inizia con una cifra o qualsiasi altro carattere che non è consentito come carattere iniziale di un identificatore, avere un trattino di sottolineatura come prefisso al componente.

Riferimenti

  • JLS 6.8.1 Nomi dei pacchetti
  • JLS 7.7 Nomi pacchetto univoci

Tutte e tre non sono le convenzioni.

Usa com.stackoverflow.mypackage .

I nomi dei pacchetti non seguono la convenzione sui nomi dei cammelli o dei caratteri di sottolineatura o trattino dei trattini.

Inoltre, la Guida allo stile di Google Java specifica esattamente la stessa convenzione (es. com.stackoverflow.mypackage ):

5.2.1 Nomi dei pacchetti

I nomi dei pacchetti sono tutti in minuscolo, con parole consecutive semplicemente concatenate insieme (senza trattini bassi). Ad esempio, com.example.deepspace , non com.example.deepSpace o com.example.deep_space .

– Google Java Style Guide: 5.2 Regole per tipo di identificatore: 5.2.1 Nomi dei pacchetti .

Le convenzioni di denominazione ufficiali non sono così rigide, non vietano nemmeno la notazione del caso cammello tranne il prefisso (nel tuo esempio).

Ma personalmente eviterei lettere maiuscole e sillabazioni , persino numeri. Io sceglierei com.stackoverflow.mypackage come suggerito anche da Bragboy.

(le sillabazioni ‘-‘ non sono legali nei nomi dei pacchetti)

MODIFICARE

Interessante: le specifiche del linguaggio hanno qualcosa da dire anche sulle convenzioni di denominazione.

Nel Capitolo 7.7 Nomi pacchetto univoci vediamo esempi con nomi di pacchetti composti da lettere maiuscole (quindi la notazione CamelCase sarebbe OK) e suggeriscono di sostituire la hyphonation con un carattere di sottolineatura (“mary-lou” -> “mary_lou”) e prefisso java parole chiave con un carattere di sottolineatura (“com.example.enum” -> “com.example._enum”)

Altri esempi di lettere maiuscole nei nomi dei pacchetti sono disponibili nel capitolo 6.8.1 Nomi dei pacchetti .

Chiunque può usare underscore _ (è OK)

Nessuno dovrebbe usare l’hypen (la sua ctriggers pratica)

Nessuno dovrebbe usare lettere maiuscole all’interno dei nomi dei pacchetti (Ctriggers pratica)

Fonte: denominazione di un pacchetto (docs.oracle)

Gli underscore sembrano brutti nei nomi dei pacchetti. Per quanto vale, in caso di nomi composti di tre o più parole, io uso le iniziali (ad esempio: com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo ) e quindi documentare il pacchetto scopo in package-info.java.

La concatenazione di parole nel nome del pacchetto è qualcosa che la maggior parte degli sviluppatori non fa.

Puoi usare qualcosa come

com.stackoverflow.mypackage

Fare riferimento alla dichiarazione del nome JLS

Preferirei usare parole singole e sotto-pacchetti, quindi invece di dire com.stackoverflow.my-package, lo renderei com.stackoverflow.my.package

Questo apre la possibilità di aggiungere sotto-pacchetti in futuro relativi al tuo pacchetto genitore. Riferimento: http://programmergate.com/coding-conventions/