Apa konvensi untuk pemisah kata dalam nama paket Java?

370

Bagaimana seharusnya satu kata terpisah dalam nama paket? Manakah dari berikut ini yang benar?

  1. com.stackoverflow.my_package (menggarisbawahi)
  2. com.stackoverflow.my-package (tanda hubung)
  3. com.stackoverflow.MyPackage (CamelCase)

Apa standar umum?

Jigar
sumber
15
Contoh lain yang belum disebutkan adalah menggunakan periode:com.stackoverflow.my.package
Brad Cupit
11
(2) bukan Java legal. Tidak jelas mengapa Anda bahkan bertanya tentang hal itu.
Marquis of Lorne
Perhatikan bahwa semua ini hanya untuk memastikan keunikan. Satu-satunya hal yang benar-benar diberlakukan adalah tetap keluar dari ruang java. *.
Thorbjørn Ravn Andersen

Jawaban:

248

Inilah yang ditetapkan oleh dokumen konvensi penamaan resmi:

Paket

Awalan nama paket yang unik selalu ditulis dalam semua-huruf kecil ASCII dan harus menjadi salah satu nama top-level domain, saat ini com, edu, gov, mil, net, org, atau salah satu dari Inggris kode dua huruf mengidentifikasi negara-negara sebagaimana ditentukan dalam ISO Standar 3166, 1981.

Komponen selanjutnya dari nama paket bervariasi sesuai dengan konvensi penamaan internal organisasi sendiri. Konvensi tersebut dapat menentukan bahwa komponen nama direktori tertentu menjadi divisi, departemen, proyek, mesin, atau nama login.

Contohnya

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

Referensi


Perhatikan bahwa secara khusus, apa pun yang mengikuti awalan domain tingkat atas tidak ditentukan oleh dokumen di atas. JLS juga setuju dengan ini dengan memberikan contoh-contoh berikut:

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

Kutipan berikut juga relevan:

Dalam beberapa kasus, nama domain internet mungkin bukan nama paket yang valid. Berikut adalah beberapa konvensi yang disarankan untuk menangani situasi ini:

  • Jika nama domain berisi tanda hubung, atau karakter khusus lainnya yang tidak diizinkan dalam pengidentifikasi, ubah itu menjadi garis bawah.
  • Jika salah satu komponen nama paket yang dihasilkan adalah kata kunci, maka tambahkan garis bawah padanya.
  • Jika salah satu komponen nama paket yang dihasilkan dimulai dengan angka, atau karakter lain apa pun yang tidak diizinkan sebagai karakter awal pengidentifikasi, buat awalan garis bawah pada komponen.

Referensi

polygenelubricants
sumber
52
Bab 7.7 bahkan merekomendasikan penggunaan garis bawah pada nama paket!
Andreas Dolk
6
Di sini: oracle.com/technetwork/java/codeconventions-135099.html dikatakan semuanya lebih rendah, tetapi di sini docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.1 katanya bahwa komponen pertama harus dalam huruf kecil, juga mereka menghapus contoh pemisahan kata huruf besar. Juga di sini: docs.oracle.com/javase/tutorial/java/package/namingpkgs.html katanya semuanya huruf kecil. Jadi sepertinya huruf besar dalam nama paket saat ini tidak disarankan.
dhblah
27
Bab 7.7 tidak merekomendasikan penggunaan garis bawah, itu merekomendasikan mengganti simbol khusus / tidak valid dengan garis bawah yang cukup jauh dari hanya merekomendasikan untuk penggunaan umum.
eduard.dudar
270

Ketiganya bukan konvensi.

Gunakan com.stackoverflow.mypackage.

Nama paket tidak mengikuti casing unta atau garis bawah atau konvensi penamaan paket tanda hubung .

Selain itu, Google Java Style Guide menetapkan com.stackoverflow.mypackagekonvensi yang persis sama (yaitu ):

5.2.1 Nama paket

Nama paket semuanya huruf kecil, dengan kata-kata berurutan yang digabungkan bersama (tanpa garis bawah). Misalnya com.example.deepspace,, tidak com.example.deepSpace atau com.example.deep_space.

- Google Java Style Guide: 5.2 Aturan berdasarkan jenis pengenal: 5.2.1 Nama paket .

pembual
sumber
9
Saya sebagian setuju - mereka tidak 'salah' menurut konvensi penamaan java tetapi mereka tidak boleh digunakan menurut pendapat saya. ( java.sun.com/docs/codeconv/html/CodeConventions.doc8.html )
Andreas Dolk
@Andreas_D tautan yang Anda berikan menyatakan bahwa "Awalan nama paket unik selalu ditulis dalam huruf ASCII semua-huruf kecil"
Jose Gómez
1
@ JoseGómez " Awalan ". Jadi, imho ini tidak mengecualikan semua kata lain yang terdiri dari nama paket menjadi CamelCase atau snake_case
Antek
21

Siapa pun dapat menggunakan garis bawah _ (tidak apa-apa)

Tidak seorang pun boleh menggunakan hypen - (praktik buruknya )

Tidak seorang pun harus menggunakan huruf kapital di dalam nama paket (Praktek buruk)

CATATAN: Di sini "Praktek Buruk" dimaksudkan untuk secara teknis Anda diizinkan menggunakannya, tetapi secara konvensional tidak sopan untuk menulis.

Sumber: Penamaan Paket (docs.oracle)

Himanshu Mori
sumber
47
Ya, menggunakan tanda hubung adalah praktik yang buruk, karena itu adalah kesalahan. Dan menulis kode yang tidak dikompilasi memang praktik yang buruk.
glglgl
Tautan yang baik - membantu memberikan semua ini konteks ketika Anda tahu apa yang dikatakan sumber. Saya sudah terbiasa dengan semua konvensi huruf kecil juga. Tetapi menurut dokumen, sepertinya itu hanya masalah pilihan / gaya. Saya telah menambahkan komentar ke posting tertentu yang ditanya tentang kasus unta untuk nama paket (yang menurut saya bukan duplikat dari posting ini, btw - yang hanya bertanya tentang konvensi secara umum) stackoverflow.com/questions/36755783/…
Gene Bo
"Tanpa huruf kapital", meskipun saya setuju bahwa semua huruf besar atau sesuatu yang terlihat seperti ClassName adalah ide yang buruk, tetapi juga menghilangkan thisExample. Mengatakan "ini praktik buruk" adalah alasan yang paling tidak meyakinkan, tidak jelas, dan tidak berarti yang dapat saya pikirkan. Bisakah ini dielaborasi? (Yaitu mendefinisikan 'praktik buruk')
Manius
Anda pada dasarnya masih mengatakan "itu buruk" tanpa memberikan alasan mengapa itu harus dianggap buruk. Apakah itu merusak tooling? Buat bingung? Apakah lebih sulit untuk membaca atau mengetik? Untuk contoh yang diberikan, saya pikir kita bisa menjawab ya untuk banyak dari itu. Tapi saya tidak bisa memahami larangan mutlak pada huruf kapital. Nama paket LikeThis (seperti nama kelas) jelas membingungkan, tetapi likeThis tidak membingungkan bagi saya dan tampaknya lebih mudah dibaca untuk nama paket dua kata seperti bigdataSource (vs "bigdatasource"). Kecuali ada beberapa alasan camelCase adalah ide buruk untuk paket yang saya tidak sadari, itu tampaknya baik-baik saja.
Manius
Ternyata saya melewatkan ini: oracle.com/technetwork/java/codeconventions-135099.html Semua huruf kecil adalah bagian dari konvensi nama paket Oracle. Saya masih berpikir itu adalah konvensi yang agak jelek untuk menyingkirkan kasus unta yang mulai lebih rendah, untuk saat-saat (jarang) ketika Anda perlu menggunakan nama paket dua kata dan tidak masuk akal untuk membuatnya menjadi dua direktori. Tapi oh baiklah.
Manius
18

Konvensi penamaan resmi tidak seketat itu, mereka bahkan tidak 'melarang' notasi kasus unta kecuali untuk awalan ( comdalam contoh Anda).

Tetapi saya pribadi akan menghindari huruf besar dan tanda hubung , bahkan angka. Saya akan memilih com.stackoverflow.mypackageseperti yang disarankan Bragboy juga.

(tanda hubung '-' tidak sah dalam nama paket)

EDIT

Menarik - spesifikasi bahasa memiliki sesuatu untuk dikatakan tentang konvensi penamaan juga.

Dalam Bab 7.7 Nama Paket Unik, kita melihat contoh dengan nama paket yang terdiri dari huruf besar (jadi notasi CamelCase akan OK) dan mereka menyarankan untuk mengganti hyphonation dengan garis bawah ("mary-lou" -> "mary_lou") dan awalan java kata kunci dengan garis bawah ("com.example.enum" -> "com.example._enum")

Beberapa contoh lagi untuk huruf besar dalam nama paket dapat ditemukan di bab 6.8.1 Nama Paket .

Andreas Dolk
sumber
2
Seperti yang telah dicatat Andreas, tidak ada aturan tentang penggunaan casing atas dalam nama paket. Salah satu alasan khusus untuk menghindarinya adalah bahwa saya telah melihat orang-orang mengalami masalah dengan nama paket kasus campuran ketika melakukan pengembangan lintas platform. Terutama ketika seseorang memutuskan untuk mengganti nama atau mengubah case suatu paket, Anda kemudian mengandalkan VCS Anda dan lingkungan pengembangan untuk melakukan hal yang benar dengan case direktori.
Shorn
2
Sebenarnya, ada aturan: "Awalan nama paket unik selalu ditulis dalam huruf ASCII semua-huruf kecil" ( oracle.com/technetwork/java/codeconventions-135099.html )
Jose Gómez
4

Garis bawah terlihat jelek dalam nama paket. Untuk apa nilainya, dalam kasus nama gabungan dari tiga kata atau lebih saya menggunakan inisial (misalnya:) com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijodan kemudian mendokumentasikan tujuan paket di package-info.java.

jpangamarca
sumber
4
ini mungkin tidak dapat dibaca dan sulit untuk memahami isi paket hanya dengan melihat nama paket
Vishal Akkalkote
1
Cukup adil. Itu sebabnya saya sarankan menggunakan dokumentasi. Saya akan menggunakan pendekatan ini kapan saja alih-alih kata-kata penuh yang digabungkan (apiratesheet - apakah 'Lembar Tingkat API' atau 'Lembar Bajak Laut'?)
jpangamarca
1

Penggabungan kata-kata dalam nama paket adalah sesuatu yang kebanyakan pengembang tidak lakukan.

Anda dapat menggunakan sesuatu seperti.

com.stackoverflow.mypackage

Lihat Deklarasi Nama JLS

Craumm
sumber