Javaパッケージ名の単語区切りの規則は何ですか?


370

パッケージ名の単語をどのように区切る必要がありますか?次のうち正しいものはどれですか。

  1. com.stackoverflow.my_package (アンダースコア)
  2. com.stackoverflow.my-package (ハイフン)
  3. com.stackoverflow.MyPackage (キャメルケース)

一般的な基準は何ですか?


15
まだ言及していない別の例では、ピリオドを使用している:com.stackoverflow.my.package
ブラッドCupit

11
(2)は正当なJavaではありません。なぜあなたがそれについて尋ねているのかさえはっきりしていません。
ローン侯爵

これはすべて、一意性を確保するためだけのものであることに注意してください。実際に強制されるのは、java。*スペースから離れることです。
するThorbjörnRavnアンデルセン

回答:


248

正式な命名規則のドキュメントでは次のように規定されています。

パッケージ

ユニークなパッケージ名の接頭辞は常にすべて小文字のASCII文字で書かれており、トップレベルドメイン名のいずれかである必要があり、現在comedugovmilnetorg、または国を特定する英語2文字コードの1 ISOに指定されています標準3166、1981。

パッケージ名の後続のコンポーネントは、組織独自の内部命名規則によって異なります。このような規則では、特定のディレクトリ名コンポーネントが部門、部門、プロジェクト、マシン、またはログイン名であることを指定できます。

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

参考文献


特に、トップレベルドメインプレフィックスに続くものは、上記のドキュメントでは指定されていないことに注意してください。JLSはまた、次の例を挙げてこれに同意します。

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

次の抜粋も関連があります。

場合によっては、インターネットドメイン名が有効なパッケージ名ではない可能性があります。これらの状況に対処するための推奨される規則を以下に示します。

  • ドメイン名にハイフン、または識別子で使用できないその他の特殊文字が含まれている場合は、アンダースコアに変換します。
  • 結果のパッケージ名コンポーネントのいずれかがキーワードの場合、それらにアンダースコアを追加します。
  • 結果のパッケージ名コンポーネントのいずれかが数字、または識別子の最初の文字として許可されていないその他の文字で始まる場合は、コンポーネントの前にアンダースコアを付けます。

参考文献


52
第7.7章では、パッケージ名にアンダースコアを使用することも推奨しています!
Andreas Dolk 2010


6
ここ:oracle.com/technetwork/java/codeconventions-135099.htmlそれはすべて低いと言っていますが、ここではdocs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.1と言っています最初のコンポーネントは小文字である必要があること、および大文字の単語の分離の例も削除されました。またここに:docs.oracle.com/javase/tutorial/java/package/namingpkgs.htmlそれはすべて小文字を言います。したがって、パッケージ名の大文字は現在推奨されていないようです。
dhblah 2014年

27
第7.7章では、アンダースコアの使用は推奨されていません。特別な/無効なシンボルをアンダースコアに置き換えることをお勧めします。これは、一般的な使用を推奨するだけではまったくありません。
eduard.dudar

270

3つすべてが規則ではありません。

を使用しcom.stackoverflow.mypackageます。

パッケージ名は、キャメルの大文字小文字、アンダースコア、ハイフンのパッケージ命名規則に従っていません。

また、Google Java Style Guideでは、まったく同じ(つまりcom.stackoverflow.mypackage)規則を指定しています。

5.2.1パッケージ名

パッケージ名はすべて小文字で、連続する単語は単純に連結されます(下線なし)。例えば、com.example.deepspaceではありません com.example.deepSpacecom.example.deep_space

Google Javaスタイルガイド:5.2識別子タイプ別のルール:5.2.1パッケージ名


9
私は部分的に同意します-それらはJavaの命名規則に従って「間違っている」わけではありませんが、私の意見では使用すべきではありません。(java.sun.com/docs/codeconv/html/CodeConventions.doc8.html
アンドレアス・ドルク

@Andreas_D提供したリンクには、「一意のパッケージ名の接頭辞は常にすべて小文字のASCII文字で書かれている」
JoseGómez'26

1
@JoseGómez " プレフィックス "。したがって、これは、パッケージ名を構成する他のすべての単語をCamelCaseまたはsnake_caseから除外するものではありません
Antek

21

誰でもアンダースコア_を使用できます(その場合は問題ありません)

誰もハイフンを使うべきではありません-(その悪い習慣)

パッケージ名に大文字を使用しないでください(悪い習慣)

注:ここでの「悪い習慣」は、技術的にはそれを使用することを許可されていることを意味しますが、従来は書き方が良くありません。

ソース:パッケージの命名(docs.oracle)


47
はい、ハイフンはエラーであるため、使用しないでください。そして、コンパイルしないコードを書くことは確かに悪い習慣です。
glglgl 2017年

良いリンク-ソースが言っていることを知っているとき、これらすべてに何らかのコンテキストを与えるのに役立ちます。すべての小文字の慣例にも慣れています。しかし、ドキュメントによると、それは単に選択/スタイルの問題であるように見えます。私はパッケージ名のキャメルケースについて尋ねられた特定の投稿にコメントを追加しました(これはこの投稿の複製ではないと思いますが、これは一般的な規則について尋ねるだけです) stackoverflow.com/questions/36755783/…
Gene Bo

「大文字なし」、すべて大文字にすること、またはClassNameのように見えるものは悪い考えであることに同意しますが、この例も排除されます。「悪い習慣だ」と言うのは、私が考えることができる最も説得力がなく、曖昧で意味のない理由についてです。これについて詳しく説明できますか?(つまり、「悪い習慣」を定義します)
Manius

あなたはまだそれが悪いと考えられるべき理由を正当化せずに、基本的には「それは悪い」と言っています。工具を壊しますか?混乱を引き起こしますか?読みづらいですか、タイプするのが難しいですか?与えられた例について、私たちはそれらの多くにイエスと答えることができると思います。しかし、私は大文字の絶対的な禁止を理解できません。(クラス名のような)パッケージ名LikeThisは明らかに紛らわしいですが、likeThisは私にとって紛らわしくなく、bigdataSource(vs "bigdatasource")のような2ワードのパッケージ名の方が読みやすくなっています。なんらかの理由がない限り、キャメルケースは私が知らないパッケージにとって悪い考えですが、それは問題ないようです。
Manius

私はこれを見逃したことがわかりましたoracle.com/technetwork/java/codeconventions-135099.html すべて小文字は、Oracleのパッケージ名の規則の一部です。2文字のパッケージ名を使用する必要があり、2つのディレクトリにするのは意味がないような(まれな)時のために、それはキャメルの大文字小文字を除外するためのかなりひどい規則だとまだ思います。でもまあ。
Manius

18

公式の命名規則はそれほど厳密ではありませんcom。(例では)接頭辞を除いて、キャメルケース表記を「禁止」することもありません。

しかし、私は個人的には大文字やハイフン、さらには数字を避けます。私com.stackoverflow.mypackageもブラッグボーイが提案したように選びます。

(ハイフン「-」はパッケージ名では無効です)

編集

興味深い-言語仕様には、命名規則についても言いたいことがある。

章7.7ユニークなパッケージ名は、我々は(キャメルケースの表記はOKになるので)大文字で構成されたパッケージ名の例を参照してください、彼らはアンダースコア(「メリー・ルー」 - >「mary_lou」)によってhyphonationを交換することをお勧めして接頭辞のjava下線付きのキーワード( "com.example.enum"-> "com.example._enum")

パッケージ名の大文字のその他の例については、6.8.1章「パッケージ名」を参照してください


2
Andreasが述べたように、パッケージ名に大文字を使用することに関する規則はありません。これを回避する特定の理由の1つは、クロスプラットフォーム開発を行っているときに、大文字と小文字が混在するパッケージ名で問題が発生することを私が見たことがあるためです。特に、誰かがパッケージのケースの名前を変更または変更することを決定した場合、VCSと開発環境の両方に依存して、ディレクトリのケースで正確に正しいことを行います。
Shorn、2014年

2
実際には、ルールがあります:「ユニークなパッケージ名の接頭辞は常にすべて小文字のASCII文字で書かれている」(oracle.com/technetwork/java/codeconventions-135099.html
ホセ・ゴメス・

4

アンダースコアはパッケージ名で見苦しく見えます。価値があるのは、3つ以上の単語com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijopackage-info.java構成される名前の場合、イニシャル(例:)を使用してから、パッケージの目的をに文書化することです。


4
これは読みにくく、パッケージ名を見るだけではパッケージの内容を理解するのが難しい場合があります
Vishal Akkalkote

1
けっこうだ。そのため、ドキュメントを使用することをお勧めします。完全な単語を連結する代わりに、いつでもこのアプローチを使用します(apiratesheet-それは「APIレートシート」または「A海賊シート」ですか?)
jpangamarca

1

パッケージ名に含まれる単語の連結は、ほとんどの開発者が行うことではありません。

次のようなものを使用できます。

com.stackoverflow.mypackage

JLS名の宣言を参照

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.