¿Cuál es la convención para el separador de palabras en nombres de paquetes Java?


¿Cómo se deben separar las palabras en los nombres de los paquetes? ¿Cuáles de las siguientes son correctas?

  1. com.stackoverflow.my_package (subrayado)
  2. com.stackoverflow.my-package (guiones)
  3. com.stackoverflow.MyPackage (camelCase)

¿Cuál es la norma general?

Author: Clijsters, 2010-07-05

6 answers

Esto es lo que prescribe el documento oficial de convenciones de nombres:

Paquetes

El prefijo de un nombre de paquete único siempre se escribe en letras ASCII minúsculas y debe ser uno de los nombres de dominio de nivel superior, actualmente com, edu, gov, mil, net, org, o uno de los códigos de dos letras en inglés que identifican a los países como se especifica en la norma ISO 3166, 1981.

Los componentes posteriores del nombre del paquete varían según un convenciones de nomenclatura internas propias de la organización. Tales convenciones pueden especificar que ciertos componentes de nombre de directorio sean nombres de división, departamento, proyecto, máquina o inicio de sesión.

Ejemplos

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

Referencias


Tenga en cuenta que, en particular, nada que siga el prefijo de dominio de nivel superior no se especifica por el documento anterior. La JLS también está de acuerdo con esto al dar los siguientes ejemplos:

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

El siguiente extracto también es relevante:

En algunos casos, el nombre de dominio de Internet puede no ser un nombre de paquete válido. Aquí hay algunas convenciones sugeridas para lidiar con estas situaciones:

  • Si el nombre de dominio contiene guion, o cualquier otro carácter especial no permitido en un identificador, convertirlo en un guion bajo.
  • Si alguno de los componentes de nombre de paquete resultantes son palabras clave, entonces añádales guiones bajos.
  • Si alguno de los componentes del nombre de paquete resultante comienza con un dígito, o cualquier otro carácter que no esté permitido como carácter inicial de un identificador, tiene un guion bajo prefijado al componente.

Referencias

 192
Author: polygenelubricants,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-05 12:31:32

Las tres no son las convenciones.

Use com.stackoverflow.mypackage.

Los nombres de los paquetes no siguen la fórmula camel o guiones bajos o guiones bajos convención de nomenclatura de paquetes.

También, Google Java Style Guide especifica exactamente la misma convención (es decir, com.stackoverflow.mypackage):

5.2.1 Nombres de paquetes

Los nombres de los paquetes son todos en minúsculas, con palabras consecutivas simplemente concatenadas juntas (sin guiones bajos). Por ejemplo, com.example.deepspace, no com.example.deepSpace o com.example.deep_space.

- Guía de estilo de Google Java: 5.2 Reglas por tipo de identificador: 5.2.1 Nombres de paquetes.

 176
Author: bragboy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-09-18 16:37:45

Las convenciones oficiales de nomenclatura no son tan estrictas, ni siquiera 'prohíben' la notación de camel case excepto el prefijo (com en tu ejemplo).

Pero yo personalmente evitaría letras mayúsculas y guiones, números pares. Elegiría com.stackoverflow.mypackage como Bragboy sugirió también.

(las guiones '-' no son legales en los nombres de paquetes)

EDITAR

Interesante - la especificación del lenguaje también tiene algo que decir sobre las convenciones de nomenclatura.

En Capítulo 7.7 Nombres únicos de paquetes vemos ejemplos con nombres de paquetes que consisten en letras mayúsculas (por lo que la notación camelCase estaría bien) y sugieren reemplazar el guion por un guion bajo ("mary-lou" -> "mary_lou") y anteponer las palabras clave java con un guion bajo ("com.ejemplo.enum "- > " com.ejemplo._enum")

Algunos ejemplos más para letras mayúsculas en nombres de paquetes se pueden encontrar en el capítulo 6.8.1 Nombres de paquetes.

 15
Author: Andreas_D,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-07-05 12:25:26

Cualquiera puede usar el subrayado _ (está bien)

Nadie debe usar guion - (su Mala práctica)

Nadie debe usar mayúsculas dentro de los nombres de los paquetes (Mala práctica)

Fuente: Nombrar un paquete(docs.oracle)

 6
Author: Himanshu Mori,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-11-29 06:16:10

Los guiones bajos se ven feos en los nombres de los paquetes. Para lo que vale, en el caso de nombres compuestos de tres o más palabras uso iniciales (por ejemplo: com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo) y luego documento el propósito del paquete en package-info.Java.

 1
Author: jpangamarca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-02-07 15:45:40

La concatenación de palabras en el nombre del paquete es algo que la mayoría de los desarrolladores no hacen.

Puedes usar algo como.

com.stackoverflow.mypackage

Refer JLS Name Declaration

 0
Author: CraUmm,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-06-20 05:01:56