パッケージ名に含まれる単語をどのように分ける必要がありますか?次のうち正しいものはどれですか?
com.stackoverflow.my_package
(アンダースコア)com.stackoverflow.my-package
(ハイフン)com.stackoverflow.MyPackage
(キャメルケース)一般的な標準とは何ですか?
公式の命名規則ドキュメントで規定されているものは次のとおりです。
パッケージ
一意のパッケージ名のプレフィックスは常にすべて小文字のASCII文字で記述され、トップレベルドメイン名の1つである必要があります。現在は
com
、edu
、gov
、mil
、net
、org
、またはISO規格3166、1981で指定されている国を識別する英語の2文字コード。パッケージ名の後続のコンポーネントは、組織独自の内部命名規則によって異なります。このような規則では、特定のディレクトリ名コンポーネントが部門名、部門名、プロジェクト名、マシン名、またはログイン名であることを指定する場合があります。
例
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
次の抜粋も関連しています。
場合によっては、インターネットドメイン名が有効なパッケージ名ではない可能性があります。これらの状況に対処するための推奨される規則を次に示します。
- ドメイン名にハイフンまたは識別子で許可されていないその他の特殊文字が含まれている場合は、アンダースコアに変換します。
- 結果のパッケージ名コンポーネントのいずれかがキーワードである場合、アンダースコアを追加します。
- 結果のパッケージ名コンポーネントのいずれかが数字、または識別子の最初の文字として許可されていない他の文字で始まる場合は、コンポーネントの前にアンダースコアを付けます。
3つすべてが規則ではありません。
com.stackoverflow.mypackage
を使用します。
パッケージ名は、ラクダの大文字小文字、アンダースコア、ハイフンに続きません パッケージの命名規則 。
また、 Google Java Style Guide はまったく同じ(つまりcom.stackoverflow.mypackage
)規則を指定します。
5.2.1パッケージ名
パッケージ名はすべて小文字で、連続する単語は単純に連結されます(アンダースコアなし)。たとえば、
com.example.deepspace
、notcom.example.deepSpace
またはcom.example.deep_space
。
公式の命名規則はそれほど厳密ではなく、接頭辞(例ではcom
)を除いて、ラクダケース表記を「禁止」しません。
しかし、私は個人的に大文字を避けます とハイフネーション、 偶数。 Bragboyも提案したように、com.stackoverflow.mypackage
を選択します。
(ハイフネーション「-」はパッケージ名では無効です)
編集
おもしろい-言語仕様には、命名規則についても説明することがあります。
第7.7章固有のパッケージ名 では、大文字で構成されるパッケージ名の例があり(したがってCamelCase表記でも問題ありません)、ハイフォネーションをアンダースコア(「mary-lou」-> 「mary_lou」)およびアンダースコアを使用したJavaキーワードのプレフィックス(「com.example.enum」->「com.example._enum」)
パッケージ名の大文字の例は、 6.8.1パッケージ名 の章にあります。
誰でもアンダースコア_を使用できます(大丈夫です)
誰もハイペンを使用しないでください-(その悪い習慣)
パッケージ名に大文字を使用しないでください(悪い習慣)
ここで「悪い練習」は技術的にあなたがそれを使用することを許可されていることを意味しますが、従来は書くのが良い方法ではありません。
アンダースコアは、パッケージ名では見苦しくなります。価値があるのは、名前が3語以上の場合、イニシャル(たとえば、com.company.app.ingresoegresofijo (ingreso/egreso fijo) -> com.company.app.iefijo
)を使用し、package-info.Java
でパッケージの目的を文書化します。