Jak należy rozdzielić słowa w nazwach pakietów? Które z poniższych są poprawne?
com.stackoverflow.my_package
(podkreślać)com.stackoverflow.my-package
(Myślniki)com.stackoverflow.MyPackage
(CamelCase)
Jaki jest ogólny standard?
Jak należy rozdzielić słowa w nazwach pakietów? Które z poniższych są poprawne?
com.stackoverflow.my_package
(podkreślać)com.stackoverflow.my-package
(Myślniki)com.stackoverflow.MyPackage
(CamelCase)Jaki jest ogólny standard?
Odpowiedzi:
Oto, co nakazuje oficjalny dokument konwencji nazewnictwa:
Pakiety
Przedrostek unikalnej nazwy pakietu jest zawsze napisane we wszystkich, małych liter ASCII i powinien być jedną z nazw domen najwyższego poziomu, obecnie
com
,edu
,gov
,mil
,net
,org
, lub w jednym z angielskich kodów dwuliterowych kraje identyfikacyjnych zgodnie z ISO Standard 3166, 1981.Kolejne składniki nazwy pakietu różnią się zgodnie z wewnętrznymi konwencjami nazewnictwa organizacji. Takie konwencje mogą określać, że niektóre komponenty nazw katalogów to nazwy działów, działów, projektów, maszyn lub loginów.
Przykłady
com.sun.eng
com.apple.quicktime.v2
edu.cmu.cs.bovik.cheese
Zwróć uwagę, że w szczególności wszystko, co następuje po prefiksie domeny najwyższego poziomu, nie jest określone w powyższym dokumencie. JLS zgadza się z tym, podając następujące przykłady:
com.sun.sunsoft.DOE
gov.whitehouse.socks.mousefinder
com.JavaSoft.jag.Oak
org.npr.pledge.driver
uk.ac.city.rugby.game
Istotny jest również następujący fragment:
W niektórych przypadkach nazwa domeny internetowej może nie być prawidłową nazwą pakietu. Oto kilka sugerowanych konwencji postępowania w takich sytuacjach:
- Jeśli nazwa domeny zawiera łącznik lub inny znak specjalny niedozwolony w identyfikatorze, przekonwertuj go na znak podkreślenia.
- Jeśli którykolwiek z wynikowych składników nazwy pakietu jest słowem kluczowym, dodaj do nich znak podkreślenia.
- Jeśli którykolwiek z wynikowych składników nazwy pakietu zaczyna się cyfrą lub innym znakiem, który nie jest dozwolony jako początkowy znak identyfikatora, należy poprzedzić znakiem podkreślenie.
Wszystkie trzy nie są konwencjami.
Zastosowanie com.stackoverflow.mypackage
.
Nazwy pakietów nie są zgodne z konwencją nazewnictwa wielbłądów, podkreśleniami lub łącznikami .
Ponadto Przewodnik po stylu Google Java określa dokładnie tę samą (tj. com.stackoverflow.mypackage
) Konwencję:
5.2.1 Nazwy pakietów
Nazwy pakietów są pisane małymi literami, a kolejne słowa są po prostu łączone razem (bez podkreślników). Na przykład
com.example.deepspace
, niecom.example.deepSpace
bądźcom.example.deep_space
.- Przewodnik po stylu Java firmy Google: 5.2 Reguły według typu identyfikatora: 5.2.1 Nazwy pakietów .
Każdy może używać podkreślenia _ (jego OK)
Nikt nie powinien używać hypen - (jego zła praktyka)
Nikt nie powinien używać wielkich liter w nazwach paczek (zła praktyka)
UWAGA: Tutaj „Zła praktyka” jest przeznaczona dla tego, że technicznie możesz to wykorzystać, ale konwencjonalnie nie jest to dobre maniery do pisania.
Źródło: Nazywanie pakietu (docs.oracle)
Oficjalne konwencje nazewnictwa nie są aż tak rygorystyczne, nawet nie zabraniają notacji na wielbłądach z wyjątkiem prefiksu (com
w twoim przykładzie).
Ale osobiście unikałbym wielkich liter i łączników , a nawet liczb. Wybrałbymcom.stackoverflow.mypackage
jak Bragboy zasugerował też.
(dzielenia wyrazów „-” nie są dozwolone w nazwach pakietów)
EDYTOWAĆ
Ciekawe - specyfikacja języka ma również coś do powiedzenia na temat konwencji nazewnictwa.
W rozdziale 7.7 Unikalne nazwy pakietów widzimy przykłady z nazwami pakietów składającymi się z wielkich liter (więc notacja CamelCase byłaby OK) i sugerują zastąpienie hiphonacji znakiem podkreślenia („mary-lou” -> „mary_lou”) i prefiksem java słowa kluczowe z podkreśleniem („com.example.enum” -> „com.example._enum”)
Więcej przykładów wielkich liter w nazwach pakietów można znaleźć w rozdziale 6.8.1 Nazwy pakietów .
Podkreślenia wyglądają brzydko w nazwach pakietów. Co jest warte, w przypadku nazw złożonych z trzech lub więcej słów używam inicjałów (na przykład:), com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo
a następnie dokumentuję cel pakietu package-info.java
.
Łączenie słów w nazwie pakietu jest czymś, czego większość programistów nie robi.
Możesz użyć czegoś takiego.
com.stackoverflow.mypackage
Zobacz deklarację nazwy JLS
com.stackoverflow.my.package