Java paket adlarında sözcük ayırıcı için kural nedir?


370

Paket adlarında kelimeler nasıl ayrılmalıdır? Aşağıdakilerden hangisi doğrudur?

  1. com.stackoverflow.my_package (vurgulamak)
  2. com.stackoverflow.my-package (Kısa çizgi)
  3. com.stackoverflow.MyPackage (CamelCase)

Genel standart nedir?


15
henüz bahsedilmeyen bir başka örnek nokta kullanmaktır:com.stackoverflow.my.package
Brad Cupit

11
(2) yasal Java değildir. Neden bunu sorduğun bile belli değil.
Lorne Marquis

Tüm bunların sadece benzersizliği sağlamak olduğunu unutmayın. Gerçekte zorlanan tek şey java alanından uzak durmaktır.
Thorbjørn Ravn Andersen

Yanıtlar:


248

Resmi adlandırma sözleşmeleri belgesinin önerileri şunlardır:

Paketler

Benzersiz bir paket adının önek her zaman tüm-küçük harf ASCII harflerle yazılır ve üst düzey alan adlarının biri olmalıdır, şu anda com, edu, gov, mil, net, org, veya ülkeleri tanımlayan İngiliz iki harfli kodlarından biri ISO belirtildiği şekilde Standart 3166, 1981.

Paket adının sonraki bileşenleri, kuruluşun kendi dahili adlandırma kurallarına göre değişir. Bu tür kurallar, belirli dizin adı bileşenlerinin bölüm, departman, proje, makine veya oturum açma adları olduğunu belirtebilir.

Örnekler

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

Referanslar


Özellikle, üst düzey alan adı önekini izleyen herhangi bir şeyin yukarıdaki belge tarafından belirtilmediğini unutmayın. JLS ayrıca aşağıdaki örnekleri vererek bunu kabul eder:

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

Aşağıdaki alıntı da konuyla ilgilidir:

Bazı durumlarda, internet etki alanı adı geçerli bir paket adı olmayabilir. İşte bu durumlarla başa çıkmak için önerilen bazı sözleşmeler:

  • Etki alanı adı bir tire işareti veya tanımlayıcıda izin verilmeyen başka bir özel karakter içeriyorsa, onu alt çizgiye dönüştürün.
  • Ortaya çıkan paket adı bileşenlerinden herhangi biri anahtar sözcükse, bunlara alt çizgi ekleyin.
  • Sonuçta elde edilen paket adı bileşenlerinden herhangi biri bir rakamla veya tanımlayıcının başlangıç ​​karakteri olarak izin verilmeyen başka bir karakterle başlıyorsa, bileşenin önüne bir alt çizgi eklenir.

Referanslar


52
Bölüm 7.7 alt paketlerin paket adlarında kullanılmasını bile önerir!
Andreas Dolk


6
Burada: oracle.com/technetwork/java/codeconventions-135099.html çok daha düşük diyor, ancak burada docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.1 diyor ilk bileşenin küçük harf olması gerektiği gibi, büyük harfli kelime ayırma örneklerini de kaldırmışlardır. Ayrıca burada: docs.oracle.com/javase/tutorial/java/package/namingpkgs.html tamamen küçük harf diyor. Yani paket isimlerindeki büyük harf şu anda önerilmez.
dhblah

27
Bölüm 7.7 alt çizgilerin kullanılmasını önermez, özel / geçersiz sembollerin genel kullanım için önerilmekten oldukça uzak bir alt çizgiyle değiştirilmesini önerir.
eduard.dudar

270

Üçü de sözleşmeler değil.

Kullanın com.stackoverflow.mypackage.

Paket adları deve muhafazası veya alt çizgi veya kısa çizgi paket adlandırma kuralına uymaz .

Ayrıca, Google Java Stil Kılavuzu tamamen aynı (yani com.stackoverflow.mypackage) kuralını belirtir :

5.2.1 Paket adları

Paket adlarının tümü küçüktür, ardışık kelimeler basitçe bir araya getirilir (alt çizgi içermez). Örneğin com.example.deepspace, değil com.example.deepSpace veya com.example.deep_space.

- Google Java Stil Kılavuzu: 5.2 Tanımlayıcı türüne göre kurallar: 5.2.1 Paket adları .


9
Kısmen katılıyorum - java adlandırma kurallarına göre 'yanlış' değiller ama bence kullanılmamalıdırlar. ( java.sun.com/docs/codeconv/html/CodeConventions.doc8.html )
Andreas Dolk

@Andreas_D, sağladığınız bağlantıyı "Benzersiz bir paket adının önekinin her zaman küçük ASCII harfleriyle yazıldığını" belirtir
Jose Gómez

1
@ JoseGómez " Önek ". Yani imho, bu paket adını içeren diğer tüm kelimeleri CamelCase veya snake_case olmaktan çıkarmaz
Antek

21

Herkes alt çizgi _ kullanabilir (tamam)

Kimse hipen kullanmamalı - (Kötü uygulaması)

Hiç kimse paket adlarında büyük harf kullanmamalıdır (Kötü uygulama)

NOT: Burada "Kötü Uygulama" teknik olarak kullanmak için izin verilir, ancak geleneksel olarak yazmak için iyi bir şekilde değil içindir.

Kaynak: Bir Paketi Adlandırma (docs.oracle)


47
Evet, kısa çizgi kullanmak kötü bir uygulamadır, çünkü bu bir hatadır. Ve derlemeyen kod yazmak gerçekten kötü bir uygulamadır.
glglgl

İyi bağlantı - kaynağın ne dediğini bildiğinizde tüm bu bağlamlara yardımcı olur. Ben de tüm küçük harf konvansiyonuna alışkınım. Ancak dokümanlara göre, bu sadece bir seçim / stil meselesi gibi görünüyor. Paket adları için deve davası hakkında sordum belirli bir yazıya yorum ekledim (ki bu yazının bir kopyası olduğunu düşünmüyorum, btw - sadece genel olarak konvansiyon hakkında sorar) stackoverflow.com/questions/36755783/…
Gene Bo

"Büyük harf yok", ancak tüm büyük harflerin veya bir ClassName gibi görünen bir şeyin kötü bir fikir olduğunu kabul etsem de, bu örneği de ortadan kaldırır. "Kötü uygulama" demek, düşünebileceğim en ikna edici, belirsiz ve anlamsız sebeple ilgilidir. Bu üzerinde durulabilir mi? (örneğin, 'kötü uygulama' tanımlayın)
Manius

Temelde neden kötü sayılması gerektiğini gerekçelendirmeden "kötü" diyorsunuz. Aletleri kırıyor mu? Karışıklık mı yaratmak istiyorsunuz? Okumak veya yazmak daha mı zor? Verilen örnekler için bunların çoğuna evet yanıtı verebileceğimizi düşünüyorum. Ama büyük harflerle ilgili mutlak bir yasağı anlayamıyorum . Bir paket adı LikeThis (bir sınıf adı gibi) açıkçası kafa karıştırıcı, ama likeThis bana kafa karıştırmıyor ve bigdataSource ("bigdatasource" gibi) iki kelimelik bir paket adı için daha okunabilir görünüyor. CamelCase'in farkında olmadığım paketler için kötü bir fikir olmasının bir nedeni olmadıkça, bu iyi görünüyor.
Manius

Bunu kaçırdığım ortaya çıktı: oracle.com/technetwork/java/codeconventions-135099.html Tüm küçük harfler Oracle'ın paket adı kuralının bir parçasıdır. Hala iki kelimelik bir paket adı kullanmanız gerektiğinde (iki) paket adı kullanmanız gerektiğinde daha az başlayan deve davasını dışlamak için oldukça berbat bir kural olduğunu düşünüyorum ve iki dizin yapmak mantıklı değil. Ama iyi.
Manius

18

Resmi adlandırma kuralları bu kadar katı değil, önek ( comörneğin örneğiniz) hariç deve davası gösterimini 'yasaklamıyorlar' .

Ama şahsen büyük harflerden ve tirelerden , hatta rakamlardan kaçınırım . Ben com.stackoverflow.mypackagede Bragboy'un önerdiği gibi seçerdim.

('-' tireleri paket adlarında yasal değildir)

DÜZENLE

İlginç - dil belirtimi, adlandırma kuralları hakkında da söylenecek bir şey var.

In Bölüm 7.7 Benzersiz Paketi Adları biz (CamelCase notasyonu Tamam olur böylece) büyük harflerle oluşmaktadır paket adlarıyla örneklere bakın ve bir alt çizgi ( "mary-lou" -> "mary_lou") tarafından hyphonation yerine önermek ve önek java alt çizgi içeren anahtar kelimeler ("com.example.enum" -> "com.example._enum")

Paket adlarındaki büyük harfler için daha fazla örnek 6.8.1 Paket Adları bölümünde bulunabilir .


2
Andreas'ın belirttiği gibi, paket adlarında üst kasa kullanma hakkında hiçbir kural yoktur . Bundan kaçınmak için belirli bir neden, çapraz platform geliştirme yaparken insanların karışık vaka paketi adlarıyla sorun yaşadıklarını görmemdir. Özellikle birisi bir paketin durumunu yeniden adlandırmaya veya değiştirmeye karar verdiğinde , dizin durumuyla tam olarak doğru şeyi yapmak için hem VCS'nize hem de geliştirme ortamlarınıza güvenirsiniz .
Kırpılmış

2
Aslında kurallar vardır: "Benzersiz bir paket adının öneki her zaman küçük harfli ASCII harfleriyle yazılır" ( oracle.com/technetwork/java/codeconventions-135099.html )
Jose Gómez

4

Alt çizgiler paket adlarında çirkin görünür. Değer için, üç veya daha fazla kelimeden oluşan isimler söz konusu olduğunda baş harflerini kullanıyorum (örneğin:) com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijove sonra paketin amacını belgeliyorum package-info.java.


4
bu sadece paket adına bakarak okunabilir ve paketin içeriğini anlamak zor olmayabilir
Vishal Akkalkote

1
Yeterince adil. Bu yüzden dokümantasyon kullanmanızı öneririm. Bu yaklaşımı tam kelime yerine birleştirilmiş olarak kullanırım (apiratesheet - bu 'API Rate Sheet' veya 'A Pirate Sheet' mi?)
jpangamarca

1

Paket adındaki kelimelerin birleştirilmesi çoğu geliştiricinin yapmadığı bir şeydir.

Gibi bir şey kullanabilirsiniz.

com.stackoverflow.mypackage

JLS Ad Beyanına bakın

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.