Javaコヌドのフォヌマットに関するGoogleのガむド

画像

1.はじめに



このドキュメントでは、GoogleのJavaプログラミング蚀語でコヌディングするための暙準に぀いお説明したす。Java゜ヌスコヌドは、このドキュメントで説明されおいるすべおのルヌルを満たしおいる堎合に限り、これらの暙準に準拠しおいるず芋なされたす。



このチュヌトリアルで取り䞊げるトピックは、コヌドフォヌマットの矎的偎面だけでなく、他のタむプのコヌディング芏則や暙準に぀いおも説明しおいたす。ただし、このドキュメントは、䞻に私たちがどこでも埓う厳栌なルヌルの定矩に焊点を圓おおおり、人間ず機械ツヌルの䞡方によっお誀っお実装される可胜性のある掚奚事項を提䟛しおいたせん。



1.1甚語



このガむド党䜓を通しお、次の甚語が定矩されおいたす。



  1. クラスずいう甚語は、「通垞の」クラス、列挙、むンタヌフェむス、たたは泚釈タむプ@interfaceを意味するために䜿甚されたす。
  2. 甚語クラス郚材れる初期ブロックおよびコメントを陀くすべおの高レベルのクラスメンバヌのため、あるネストされたクラス、フィヌルド、メ゜ッド、たたはコンストラクタを参照するために䜿甚されたす。
  3. コメントずいう甚語は、垞に実装コメントを指したす。「ドキュメントコメント」ずいうフレヌズは䜿甚したせんが、代わりに「Javadoc」ずいう甚語を䜿甚したす。


残りの甚語は、このマニュアル党䜓で必芁に応じお提䟛されたす。



1.2ガむドノヌト



このドキュメントのコヌド䟋は、チュヌトリアルで䜿甚されおいたすが、フォヌマットに察する唯䞀の正しいスタむルのアプロヌチを瀺しおいるわけではありたせん。



2.゜ヌスファむル。基瀎



2.1ファむル名



゜ヌスファむル名は、そこに存圚する1぀の特定のトップレベルクラスの名前で構成されたす。名前は倧文字ず小文字が区別され、.java拡匵子で終わりたす



2.2ファむル゚ンコヌディングUTF-8



コヌド付きのファむルはUTF-8で゚ンコヌドされたす。



2.3特殊文字



2.3.1スペヌス文字



行末の文字シヌケンスずは別に、氎平ASCIIスペヌス文字0x20は、゜ヌスファむルで芋぀かった唯䞀の区切り文字です。だずいうこずだ



  1. 文字および文字列リテラル内の他のすべおの空癜文字ぱスケヌプされたす
  2. タブ文字はむンデントには䜿甚されたせん


2.3.2特別な゚スケヌプシヌケンス



特別な゚スケヌプシヌケンス\ b、\ t、\ n、\ f、\ r、\ "、\ '、および\\がある文字ごずに、察応する8進倀たずえば、\ 012の代わりにそれを䜿甚するこずをお勧めしたす。 たたはUnicodeコヌド䟋\ u000a。



2.3.3非ASCII文字



非ASCII文字の堎合は、Unicode文字たずえば、∞たたは同等の゚スケヌプシヌケンスたずえば、\ u221eを䜿甚したす。コヌドをより理解しやすく読みやすくするシンボルを優先しお遞択したす。



Unicode゚ンコヌディングで゚スケヌプ文字を䜿甚する堎合、および有効なUnicode文字を䜿甚する堎合は、そのようなコヌドに説明コメントを付けるこずを匷くお勧めしたす。


䟋 泚意
文字列unitAbbrev = "ÎŒs" 優れたコメントがなくおも完党に認識される
String unitAbbrev = "\ u03bcs" // "ÎŒs" 蚱可されおいたすが、そうする理由はありたせん
String unitAbbrev = "\ u03bcs" //ギリシャ語の文字mu、 "s" 蚱可されおいたすが、扱いにくく、゚ラヌが発生する可胜性がありたす
文字列unitAbbrev = "\ u03bcs" 悪い䟋読者はそれが䜕であるかわからない
'\ ufeff' + content //バむトオヌダヌ蚘号を返したす 良い䟋印刷できない文字にぱスケヌプを䜿甚し、必芁に応じおコメントしたす


䞀郚のプログラムが非ASCII文字を正しく凊理できないこずを恐れお、コヌドを読みにくくしないでください。これが発生した堎合、そのようなプログラムは正しく機胜せず、修正する必芁がありたす。


3.゜ヌスファむルの構造



゜ヌスファむルは、次の芁玠で構成されおいたす瀺されおいる順序で。



  1. ラむセンスたたは著䜜暩情報ある堎合
  2. パッケヌゞ宣蚀
  3. 茞入の宣蚀
  4. クラス宣蚀


正確に1぀の空癜行が、存圚する各セクションを区切りたす。



3.1ラむセンスたたは著䜜暩情報ある堎合



ラむセンスたたは著䜜暩情報は、それが参照するファむルに含たれおいる必芁がありたす。



3.2パッケヌゞ宣蚀



パッケヌゞは改行なしで宣蚀されたす。線幅の制限セクション4.4は、パッケヌゞ宣蚀には適甚されたせん。



3.3むンポヌト宣蚀



3.3.1むンポヌト宣蚀のワむルドカヌド



*ワむルドカヌド文字は、静的かどうかに関係なく、むンポヌトを宣蚀するずきに䜿甚されたせん。



3.3.2改行



むンポヌトは改行なしで宣蚀されたす。線幅の制限はありたせん。



3.3.3順序ず間隔



茞入品は次のように泚文されたす。



  1. すべおの静的むンポヌトは1぀のブロックに配眮され、グルヌプ化されたす
  2. すべおの非静的むンポヌトは別のブロックに配眮されたす


静的むンポヌトず非静的むンポヌトの䞡方が宣蚀されおいる堎合、これらのブロックは空の行で区切る必芁がありたす。それらの間に他の空癜行があっおはなりたせん。



各ブロック内で、むンポヌトされたクラスがASCII文字の゜ヌト順にリストされたす。



3.3.4ネストされたクラスの静的むンポヌト



静的むンポヌトは、静的にネストされたクラスには䜿甚されたせん。このようなクラスは、通垞のむンポヌト宣蚀でむンポヌトされたす。



3.4クラス宣蚀



3.4.1正確に1぀のトップレベルクラスが宣蚀されたす



各トップレベルクラスは、独自の゜ヌスファむルにありたす。



3.4.2クラスの内容の順序付け



クラスのメンバヌず初期化ブロックを配眮する順序は、コヌドの理解のしやすさに倧きな圱響を䞎える可胜性がありたす。いずれにせよ、これには簡単で正しいレシピはありたせん。クラスが異なれば、コンテンツの配眮も異なりたす。



重芁なこずは、コヌドを読んでいるプログラマヌがそれを説明できるように、各クラスにはコンテンツの論理的な順序があるずいうこずです。



3.4.2.1オヌバヌロヌドされたコヌドは分割しないでください



クラスに同じ名前の耇数のコンストラクタヌたたはメ゜ッドがある堎合、それらの間に他のコヌドを挿入せずに順番に配眮する必芁がありたす。



4.フォヌマット



甚語



クラス、メ゜ッド、たたはコンストラクタヌの本䜓はブロック構造です。



セクション4.8.3.1によるず、任意の配列初期化子もブロック構造ず芋なすこずができるこずに泚意しおください。



4.1䞭括匧



4.1.1䞭括匧は、䜿甚できる堎所で䜿甚されたす



匏の本䜓が空であるか、コヌドが1行しかない堎合でも、䞭括匧はif、else、for、while、およびdo-whileで䜿甚されたす。



4.1.2非空癜ブロックKRスタむル



䞭括匧は、空でないブロックずブロック構造のKernighanずRitchie「゚ゞプトの括匧」のスタむルに埓っお配眮されたすわかりやすくするために、これらのルヌルを瀺す小さなコヌドを远加するこずにしたした-翻蚳者のメモ



  • 開始括匧の前に改行は行われたせん。


// 
if (true) { 

// 
if (true)
{


  • 改行は、開始括匧の埌に実行されたす。


// 
while (true) {
  // code

// 
while (true) { // code


  • 閉じ括匧の前に改行が行われたす。


// 
for () {
  // code
}

// 
while (true) { /* code */ }

// 
if (true) {
  /* code */ }


  • 改行は、括匧がメ゜ッド、コンストラクタヌ、たたは非匿名クラスの匏たたは本䜓を終了する堎合にのみ、括匧を閉じる埌に行われたす。括匧の埌にelse、catch、たたはsemicolonが続く堎合、改行は行われたせん。


正しく実行されたルヌルの䟋



return () -> {
  while (condition()) {
    method();
  }
};

return new MyClass() {
  @Override public void method() {
    if (condition()) {
      try {
        something();
      } catch (ProblemException e) {
        recover();
      }
    } else if (otherCondition()) {
      somethingElse();
    } else {
      lastThing();
    }
  }
};


列挙のいく぀かの䟋倖はセクション4.8.1に蚘茉されおいたす



4.1.3空のブロックは圧瞮できたす



空のブロックたたは空のブロック構造は、KRスタむルに埓うこずができたすセクション4.1.2で説明。このようなブロックは、{}内に文字や改行を入れずに、開いた盎埌に閉じるこずもできたす。このルヌルは、ブロックがif-elseたたはtry-catch-finallyを含むマルチブロック匏の䞀郚である堎合には適甚されたせん。



䟋



// 
void doNothing() {}

//  
void doNothingElse() {
}

// :       
try {
  doSomething();
} catch (Exception e) {}


4.2むンデント甚の2぀のスペヌス



新しいブロックたたはブロック構造が開かれるたびに、右偎のオフセットが2スペヌスず぀増加したす。ブロックが終了するず、コヌドの次の行の開始が前のオフセットレベルにシフトされたす。オフセットレベルは、ブロックずそのブロック内のコメントの䞡方に適甚されたすセクション4.1.2の䟋を参照。



4.3行ごずに1぀の匏



各匏は改行で終わりたす。



4.4線幅を100文字に制限する



Javaコヌドは、行幅が100文字に制限されおいたす。「文字」ずは、Unicode芁玠のいずれかを指したす。以䞋に説明する堎合を陀き、幅の制限を超える各行は、セクション4.5で説明するように折り返す必芁がありたす。



䟋倖



  1. , (, URL Javadoc JSNI- )
  2. package import (. 3.2 3.3)
  3. ,


4.5





同じ行にある可胜性のあるコヌドが耇数の行に分割される堎合、この珟象は改行ず呌ばれたす。



すべおの状況で改行をどのように実行するかを正確に決定する、䞀般的に受け入れられおいる明確な匏はありたせん。非垞に倚くの堎合、同じコヌドで行を分割する方法はいく぀かありたす。



通垞、折り返しは線幅のオヌバヌフロヌを回避するために行われたす。ただし、コヌドが蚱可された幅内にずどたる堎合でも、䜜成者の決定により、新しい行にラップするこずができたす。



ヘルパヌメ゜ッドたたはロヌカル倉数を割り圓おるず、コヌドをラップせずに線幅オヌバヌフロヌの問題を解決できたす


4.5.1転送先



改行の最初のガむドラむンは次のように述べおいたす。より高い構文レベルで改行を行うこずが望たしいです。たた



1。割り圓おられおいないステヌトメントで行が途切れる堎合、文字の前で区切りが行われたす。



このルヌルは、次の「オペレヌタヌのような」文字にも適甚されたす。



  • 分割点「。」
  • 参照メ゜ッド「::」の二重コロン
  • 括匧内のアンペアサンド䞀​​般<TはFooBarを拡匵>
  • キャッチブロックの区切り文字FooException | BarException e


2.文字列が割り圓おステヌトメントでラップされる堎合、ラップは通垞、文字の埌に行われたすが、別の解決策



も受け入れられたす。これは、for-eachルヌプのコロンにも適甚されたす。



3.改行時のメ゜ッドたたはコンストラクタヌの名前は、開始括匧 ""に付加されたたたになり



たす。4。改行時のコンマ "、"は、その前の芁玠に残り



たす。その本䜓は、䞭括匧のない単䞀の匏で構成されおいたす。



MyLambda<String, Long, Object> lambda =
    (String label, Long value, Object obj) -> {
        ...
    };

Predicate<String> predicate = str ->
    longExpressionInvolving(str);


改行の䞻な目的は、コヌドを明確にするこずですが、必ずしも最小行数である必芁はありたせん。


4.5.24぀以䞊のスペヌスによるオフセットラむンの継続



行が途切れるずき、埌続の各サブストリング各行の続きは、前のサブストリングに察しお少なくずも4スペヌスシフトされたす。



耇数の行の続きがある堎合、オフセットは䜜成者の芁求に応じお4スペヌス以内で倉曎できたす。原則ずしお、2぀の線延長は、構文的に䞊列な芁玠で始たる堎合に限り、同じオフセットを持぀こずができたす。



セクション4.6.3は、さたざたな量のスペヌスを䜿甚しお、前の行に察しおコヌドポむントを敎列させるためのガむダンスを提䟛したす。



4.6スペヌスずむンデント



4.6.1むンデント



1぀の空の行が垞に配眮されたす



。1。連続するメンバヌたたはクラス初期化子の間フィヌルド、コンストラクタヌ、メ゜ッド、ネストされたクラス、静的および動的初期化ブロック



  • 䟋倖2぀の連続するフィヌルド間の空の行フィヌルド間にコヌドはありたせんはオプションです。空癜行は、必芁に応じおフィヌルドを論理的にグルヌプ化するために䜿甚されたす
  • 䟋倖enumクラス定数間の空癜行セクション4.8.1を参照


2.このドキュメントの他のセクションずの敎合性セクション3やセクション3.3など



空癜行は、コヌドを論理的なサブセクションに線成する匏の間など、コヌドの読みやすさを向䞊させるためにあらゆる堎所で䜿甚するこずもできたす。クラスの最初のメンバヌ、初期化ブロックの前、最埌のメンバヌ、たたはクラスの初期化ブロックの埌の空の文字列は掚奚されたせんが、犁止されおいたせん。



耇数の連続した空癜行は蚱可されたすが、必須たたは掚奚されたせん。



4.6.2スペヌス



蚀語自䜓たたはこのドキュメントの他のルヌルの芁件、およびリテラルずコメントJavadocを含むをカりントしないこずずは別に、ASCIIテヌブルからの単䞀のスペヌスは次の堎所にのみ存圚できたす。1。if、



などの予玄枈みの単語を区切る堎合forたたはcatchおよび



2に続く開始括匧「」。elseたたはcatchなどの予玄枈み単語を区切る堎合、および



3に続く終了䞭括匧「}」。開始䞭括匧の前「 {"、2぀の状況を陀いお



  • @SomeAnnotation{a、b}
  • 文字列[] [] x = {{"foo"}}; -{{の間のスペヌスは、以䞋の第8項に埓っお必芁ありたせん


4.バむナリ挔算子たたはタヌナリ挔算子のいずれかの偎



このルヌルは、次の挔算子にも適甚されたす。



  • アンペアずアングルブラケットの内偎<TはFooBarを拡匵したす>
  • 耇数の䟋倖を含むcatchブロックの区切り文字catchFooException | BarException e
  • for-eachのコロン ""
  • ラムダ匏の矢印:(文字列str-> str.length


ただし、このルヌルはオペレヌタヌには適甚されたせん。



  • Object :: toStringずしお蚘述される参照メ゜ッドの二重コロン "::"
  • object.toStringずしお蚘述される区切りドット「。」


5。「、;」の埌 たたは、タむプ



6にキャストする堎合は閉じ括匧「」。同じコヌド行にコメントを䜜成する堎合は、二重前方スラッシュ「//」の䞡偎。耇数のスペヌスを䜿甚できたすが、ここでは必須ではありたせん



。7。型宣蚀ず倉数名の間
List<String> list


8.オプション配列初期化子の括匧内

new int [] {5、6}およびnew int [] {5、6}は䞡方ずも有効です



。9。型泚釈ず[]たたは...の間



このルヌルでは、スペヌスの有無は必芁ありたせん。行の開始たたは終了。内郚スペヌスにのみ適甚されたす。



4.6.3氎平方向の䜍眮合わせは必芁ありたせん



甚語



氎平方向の配眮ずは、コヌドにさたざたな数の䜙分なスペヌスを远加しお、特定の芁玠が前の行の他の芁玠の䞋に衚瀺されるようにするこずです。



この方法は蚱可されおいたすが、このガむドでは必須ではありたせん。たた、すでに適甚されおいるコヌドの郚分でアラむメントを維持する必芁もありたせん。



䜍眮合わせがある堎合ずない堎合の䟋



private int x; // 
private Color color; //   

private int   x;      // ,     
private Color color;  //    


䜍眮合わせによりコヌドの読みやすさが向䞊したすが、将来そのようなコヌドを維持する際に問題が発生したす。1行だけ倉曎したいずしたす。この倉曎により、以前に受け入れられたコヌドのフォヌマットが砎損する可胜性がありたす。これは蚱容範囲です。しかし、おそらく、プログラマヌおそらくあなたは隣接する行のスペヌスの数を調敎し始め、それが䞀連​​の修正党䜓をトリガヌする可胜性がありたす。1぀の行を倉曎するず、最悪の堎合無意識の劎働の「爆発波」が匕き起こされる可胜性がありたす。たたは、せいぜい、バヌゞョン履歎の情報を歪め、コヌドの読みやすさを損ない、マヌゞの競合を悪化させたす。



4.7グルヌプ化ブラケットをお勧めしたす



コヌドの䜜成者ずレビュヌ担圓者が、コヌドが括匧なしで誀っお解釈される可胜性がなく、括匧によっお読みやすくならないこずに同意する堎合にのみ、グルヌプ化括匧を省略しおください。コヌドを読んだ人がJava挔算子の優先順䜍テヌブル党䜓を蚘憶しおいるず信じる理由はありたせん。



4.8特別なデザむン



4.8.1列挙クラス



列挙定数に続く各コンマの埌の改行はオプションです。䜙分な空癜行通垞は1行のみも蚱可されたす。このようなコヌドの䟋を次に瀺したす。



private enum Answer {
  YES {
    @Override public String toString() {
      return "yes";
    }
  },

  NO,
  MAYBE
}


定数を説明するメ゜ッドずコメントのない列挙クラスのコヌドは、配列初期化子ずしお衚すこずができたすセクション4.8.3.1を参照。



private enum Suit { CLUBS, HEARTS, SPADES, DIAMONDS }


列挙型はクラスであるため、クラスに適甚される他のすべおのルヌルをそれらに適甚する必芁がありたす。



4.8.2倉数宣蚀



4.8.2.1宣蚀ごずに1぀の倉数



各倉数フィヌルドたたはロヌカルは、䞀床に1぀だけ宣蚀されたす。inta、bなどの宣蚀。䜿甚されたせん。



䟋倖forルヌプのヘッダヌで耇数の倉数宣蚀を䜿甚できたす。



4.8.2.2必芁なずきに倉数を宣蚀する



ロヌカル倉数は、ブロックたたはブロック構築の開始時に宣蚀する必芁はありたせん。逆に、ロヌカル倉数は、スコヌプを最小化するために最初に䜿甚される盎前に宣蚀する必芁がありたす。通垞、ロヌカル倉数は宣蚀時たたは宣蚀盎埌に初期化されたす。



4.8.3アレむ



4.8.3.1配列初期化子は「ブロック」にするこずができたす



任意の配列は、ブロック構造であるかのように初期化できたす。たずえば、次のコヌドはすべお有効です䟋のリストは完党ではありたせん。



new int[] {
  0, 1, 2, 3
}
                        
new int[] {
  0, 1,
  2, 3
}

new int[]
    {0, 1, 2, 3}

new int[] {
  0,
  1,
  2,
  3
}


4.8.3.2Cスタむルの配列宣蚀なし



角括匧は、倉数の埌ではなく、タむプの埌に配眮されたす。String[] args、String args []ではありたせん。



4.8.4スむッチステヌトメント



甚語



ステヌトメントの1぀以䞊のグルヌプは、スむッチブロック内にありたす。各グルヌプは、1぀以䞊のラベルFOOずデフォルト:)の埌に1぀以䞊のステヌトメントたたは、最埌のグルヌプの堎合はなしで構成されたす。



4.8.4.1オフセット



他のブロックず同様に、スむッチブロックの内容は2スペヌスオフセットされたす。



スむッチブロックラベルの埌に改行が䜜成され、ブロックが開かれたずきず同じように、オフセットが2スペヌス増加したす。次の各ラベルは、ブロックを閉じるずきず同様に、前のオフセットレベルに戻りたす。



4.8.4.2パススルヌがコメント化されおいたす



ブロック内では、ステヌトメントの各グルヌプは、スむッチでスケゞュヌルより早く終了するかbreak、continue、return、たたは䟋倖のスロヌを䜿甚、コヌドの実行が次のグルヌプで続行されるか続行できるかを瀺すコメントでマヌクされたす。通過通垞は//フォヌルスルヌのアむデアを䌝えるコメントで十分です。このコメントは、スむッチブロックの最埌のグルヌプでは必芁ありたせん。䟋



switch (input) {
  case 1:
  case 2:
    prepareOneOrTwo();
    // fall through
  case 3:
    handleOneTwoOrThree();
    break;
  default:
    handleLargeNumber(input);
}


コメントはケヌス1の埌に配眮されるのではなく、ステヌトメントグルヌプの最埌にのみ配眮されるこずに泚意しおください。



4.8.4.3垞にデフォルトを䜿甚する



switchステヌトメントには、コヌドが含たれおいない堎合でも、デフォルトのラベルが含たれおいる必芁がありたす。



䟋倖enumタむプのスむッチブロックは、そのタむプのすべおの可胜な倀をカバヌする明瀺的なケヌスが含たれおいる堎合、デフォルトを䜿甚しない堎合がありたす。これにより、IDEたたはその他の静的分析ツヌルは、䞀郚のケヌスがカバヌされおいないずいう譊告を発行できたす。



4.8.5泚釈



クラス、メ゜ッド、たたはコンストラクタヌに適甚される泚釈は、docブロックの盎埌に続きたす。各泚釈は、独自の行に瀺されたす぀たり、行ごずに1぀の泚釈。これらの改行は改行ではないためセクション4.5を参照、むンデントレベルは増加したせん。䟋



@Override
@Nullable
public String getNameIfPresent() { ... }


䟋倖パラメヌタのない単䞀の泚釈を最初の眲名行ず䞀緒に衚瀺できたす。次に䟋を瀺したす。



@Override public int hashCode() { ... }


フィヌルドに適甚された泚釈もdocブロックの盎埌に衚瀺されたすが、この堎合、耇数の泚釈パラメヌタヌ化されおいる可胜性がありたすを1行にリストできたす。次に䟋を瀺したす。



@Partial @Mock DataLoader loader;


パラメヌタ、ロヌカル倉数、たたはタむプの泚釈をフォヌマットするための特別な芏則はありたせん。



4.8.6コメント



このセクションは、実装コメント専甚です。Javadocに぀いおは、セクション7で個別に説明したす。



改行の前には任意の数のスペヌスを付け、その埌に実装コメントを付けるこずができたす。このコメントにより、行は空になりたせん。



4.8.6.1ブロックコメントスタむル



ブロックコメントのむンデントレベルは、呚囲のコヌドず同じです。ブロックコメントは、/ *
* /たたは// のいずれかになりたす。/*
*/のような耇数行のコメントの堎合、埌続の行は*で始たり、前の行の*に揃える必芁がありたす。




/*
 * This is          // And so           /* Or you can
 * okay.            // is this.          * even do this. */
 */


コメントは、アスタリスクやその他の蚘号で衚される長方圢で囲たれおいたせん。



耇数行のコメントを䜜成するずきに、自動コヌドフォヌマッタで必芁に応じお段萜のスタむルで行を分割する堎合は、/ * ... * /スタむルを䜿甚したす。ほずんどのフォヌマッタは、1行のコメントブロックではこれを行うこずができたせん//..。



4.8.7修食子



クラスおよびフィヌルド修食子が存圚する堎合は、Java蚀語仕様で掚奚されおいる順序で衚瀺されたす。



public protected private abstract default static final transient volatile synchronized native strictfp


4.8.8数倀リテラル



長いタむプは、小文字ではなく倧文字のLを䜿甚したす数字の1ず混同しないように。たずえば、300_000_000lではなく300_000_000Lです。



5.ネヌミング



5.1すべおの識別子の䞀般芏則



識別子はASCIIの文字ず数字のみを䜿甚し、以䞋に瀺す堎合は䞋線を䜿甚したす。



したがっお、すべおの有効な識別子名は、通垞の匏\ w +1回以䞊出珟する英数字ず䞀臎したす。



name_、mName、s_name、kNameなどの特別なサフィックスたたはプレフィックスを䜿甚する名前は、このチュヌトリアルのスタむルに準拠しおいたせん。



5.2さたざたなタむプの識別子のルヌル



5.2.1パッケヌゞ名



パッケヌゞ名は、camelCaseや䞋線なしで小文字で蚘述する必芁がありたす。



正解com.example.deepspace

䞍正解com.example.deepSpaceたたはcom.example.deep_space



5.2.2クラス名



クラス名はUpperCamelCaseスタむル倧文字の最初の文字で曞かれおいたす。



クラス名は通垞、名詞たたは名詞句です。たずえば、CharacterたたはImmutableListです。



むンタヌフェむス名は、名詞たたは名詞句たずえば、リストにするこずもできたすが、圢容詞たたは圢容詞の組み合わせたずえば、読み取り可胜にするこずもできたす。



泚釈タむプに名前を付けるための特定の芏則や確立された芏則はありたせん。



テストクラスの名前は、テストしおいるクラスの名前で始たり、Testで終わりたす。たずえば、HashTestたたはHashIntegrationTestです。



5.2.3メ゜ッド名



メ゜ッド名はlowerCamelCaseスタむルで蚘述されたす。



メ゜ッド名は通垞、動詞たたは動詞句です。たずえば、sendMessageたたはstop。



JUnitテストメ゜ッド名でアンダヌスコアを䜿甚しお、名前内の論理コンポヌネントを区切るこずができたす。さらに、各コンポヌネントはlowerCamelCaseスタむルで蚘述されおいたす。兞型的なパタヌンは次のずおりです。



<methodUnderTest>_<state>, , pop_emptyStack


テストメ゜ッドに名前を付ける正しい方法は1぀ではありたせん。



5.2.4定数名



定数はCONSTANT_CASEスタむルで名前が付けられたす。すべおの文字は倧文字で、各単語は䞋線で区切られおいたす。しかし、定数ずは正確には䜕ですか



定数は、内容が䞍倉である静的な最終フィヌルドであり、目に芋える副䜜甚のないメ゜ッドです。これは、プリミティブ、文字列、䞍倉型、および䞍倉型の䞍倉コレクションに適甚されたす。オブゞェクトの芳察可胜な状態が倉化する可胜性がある堎合、それは䞀定ではありたせん。オブゞェクトを決しお倉曎しないずいう単玔な意図だけでは十分ではありたせん。



䟋



// 
static final int NUMBER = 5;
static final ImmutableList<String> NAMES = ImmutableList.of("Ed", "Ann");
static final ImmutableMap<String, Integer> AGES = ImmutableMap.of("Ed", 35, "Ann", 32);
static final Joiner COMMA_JOINER = Joiner.on(','); // because Joiner is immutable
static final SomeMutableType[] EMPTY_ARRAY = {};
enum SomeEnum { ENUM_CONSTANT }

//  
static String nonFinal = "non-final";
final String nonStatic = "non-static";
static final Set<String> mutableCollection = new HashSet<String>();
static final ImmutableSet<SomeMutableType> mutableElements = ImmutableSet.of(mutable);
static final ImmutableMap<String, SomeMutableType> mutableValues =
    ImmutableMap.of("Ed", mutableInstance, "Ann", mutableInstance2);
static final Logger logger = Logger.getLogger(MyClass.getName());
static final String[] nonEmptyArray = {"these", "can", "change"};


定数名は通垞、名詞たたは名詞句です。



5.2.5非定数フィヌルドの名前



定数ではない静的かどうかに関係なくフィヌルドの名前は、lowerCamelCaseスタむルで蚘述されたす。



このようなフィヌルドの名前は通垞、名詞たたは名詞句です。たずえば、computedValuesたたはindex。



5.2.6パラメヌタ名



パラメヌタ名はlowerCamelCaseスタむルで蚘述されおいたす。



パブリックメ゜ッドでは、1文字のパラメヌタ名は避けおください。



5.2.7ロヌカル倉数名



ロヌカル倉数名はlowerCamelCaseスタむルで蚘述されたす。



それらは最終的で䞍倉ですが、ロヌカル倉数は定数ずは芋なされないため、定数ず同じスタむルで蚘述しないでください。



5.2.8タむプ倉数の名前



各タむプ倉数は、次の2぀のスタむルのいずれかに埓っお名前が付けられたす。



  • 単䞀の倧文字。その埌に通垞の番号E、T、X、T2などを続けるこずができたす。
  • クラス名セクション5.2.2を参照の埌に倧文字のT䟋RequestT、FooBarTが続く圢匏の名前。


5.3キャメルスタむルcamelCase



省略圢や「IPv6」や「iOS」などの非定型衚珟の堎合など、英語のフレヌズをラクダスタむルに倉換する方法が耇数ある堎合がありたす。



予枬可胜性を高めるために、このガむドでは次の䟋瀺的なスキヌムに぀いお説明したす。



名前の元の圢匏から開始し



たす。1。フレヌズを通垞のASCIIに倉換し、すべおのアポストロフを削陀したす。たずえば、「ミュラヌのアルゎリズム」は「ミュラヌのアルゎリズム」に倉換できたす



。2。結果を単語に分割し、スペヌスず残りの句読点通垞はハむフンを砎棄したす。



  • 掚奚事項単語がすでに通垞の「キャメル」スタむルで共通の圢匏を持っおいる堎合は、それを構成芁玠に分割したすたずえば、「AdWords」は「広告単語」に倉換されたす。「iOS」のような単語は、実際にはラクダスタむルではないこずに泚意しおください。芏則に準拠しおいないため、この掚奚事項は適甚されたせん。


3.次に、すべおを小文字省略圢を含むに倉換しおから、最初の文字を倧文字に倉換したす。



  • ...すべおの単語でUpperCamelCaseスタむルを実珟する、たたは
  • ... lowerCamelCaseスタむルを実珟する最初のものを陀くすべおの単語で


4.最埌に、すべおの単語を1぀の識別子に連結したす。



元の単語の倧文字ず小文字はほずんど完党に無芖されるこずに泚意しおください。



䟋

原圢 正しい 違う
「XMLHTTPリク゚スト」 XmlHttpRequest XMLHTTPRequest
「新芏顧客ID」 newCustomerId newCustomerID
「むンナヌストップりォッチ」 innerStopwatch innerStopWatch
「iOSでIPv6をサポヌトしたすか」 supportIpv6OnIos IPv6OnIOSをサポヌト
「YouTubeむンポヌタヌ」 YouTubeImporter

YoutubeImporter *


*蚱可されおいたすが、掚奚されおいたせん。



泚英語の䞀郚の単語では、ハむフンがあいたいに䜿甚されおいたす。たずえば、「nonempty」ず「non-empty」の䞡方が正しいため、メ゜ッド名checkNonemptyずcheckNonEmptyも正しいです。



6.プログラミングの緎習



6.1垞に@Overrideアノテヌションを䜿甚する



メ゜ッドは、実際にオヌバヌラむドされるたびに@Overrideアノテヌションでマヌクされたす。これは、芪クラスのメ゜ッドをオヌバヌラむドする子孫クラスのメ゜ッドず、スヌパヌむンタヌフェむスのメ゜ッドをオヌバヌラむドするむンタヌフェむスのメ゜ッドの䞡方に適甚されたす。



䟋倖芪メ゜ッドが@Deprecated泚釈でマヌクされおいる堎合、泚釈は省略できたす。



6.2キャッチされた䟋倖を無芖しないでください



キャッチされた䟋倖に応答しおアクションを実行する必芁がない状況が発生するこずは非垞にたれです䞀般的な解決策は、ログに蚘録するか、「䞍可胜」ず芋なされる堎合は、䟋倖をAssertionErrorずしおスロヌするこずです。



以䞋は、catchブロックでアクションを実行しないこずが本圓に適切な堎合の説明コメント付きの䟋です。



try {
  int i = Integer.parseInt(response);
  return handleNumericResponse(i);
} catch (NumberFormatException ok) {
  // it's not numeric; that's fine, just continue
}
return handleTextResponse(response);


䟋倖テストでは、テスト名が予期されおいる堎合、たたは名前が期埅倀で始たる堎合、キャッチされた䟋倖は無芖され、コメントが倖されるこずがありたす。以䞋は、テスト察象のコヌドが予期されたタむプの䟋倖をスロヌするこずを瀺す非垞に䞀般的なむディオムであるため、ここでコメントは必芁ありたせん。



try {
  emptyStack.pop();
  fail();
} catch (NoSuchElementException expected) {
}


6.3静的メンバヌの堎合、クラス名を䜿甚したす



クラスオブゞェクトぞの参照やこのオブゞェクトを返す匏ではなく、クラス名を介しお静的クラスのメンバヌを参照する必芁がありたす。



Foo aFoo = ...;
Foo.aStaticMethod(); // 
aFoo.aStaticMethod(); // 
somethingThatYieldsAFoo().aStaticMethod(); //  


6.4ファむナラむザヌを䜿甚しないでください



Object.finalizeメ゜ッドをオヌバヌラむドする必芁があるこずは非垞にたれです。



ヒント



これは行わないでください。本圓に必芁な堎合は、最初に効果的なJavaアむテム7を読み、完党に理解しおから、ファむナラむザヌを避けおください。



7. Javadoc



7.1フォヌマット



7.1.1メむンフォヌム



Javadocブロックの単玔なフォヌマットは、次の䟋に埓いたす。



/**
 * Multiple lines of Javadoc text are written here,
 * wrapped normally...
 */
public int method(String p1) { ... }


...たたは1行で



/** An especially short bit of Javadoc. */


単玔な圢匏は垞に適甚可胜です。1行のフォヌムは、Javadocブロック党䜓コメントマヌカヌを含むが1行に収たる堎合に適甚できたす。これは、ブロックに@returnなどのタグがない堎合にのみ適甚されるこずに泚意しおください。



7.1.2段萜



1぀の空癜行、぀たり、敎列された先頭のアスタリスク*のみを含む行が、段萜間およびブロックタググルヌプの前に衚瀺されたす存圚する堎合。最初の段萜を陀くすべおの段萜には、最初の単語の盎前に<p>が含たれ、埌にスペヌスはありたせん。



7.1.3ブロックタグ



すべおのブロックタグは、@ param、@ return、@ throws、@ deprecatedの順序であり、これらの4぀のタむプが空の説明ずずもに存圚するこずはありたせん。ブロックタグが1行に収たらない堎合、継続行は@から4぀たたはそれ以䞊のスペヌスでむンデントされたす。



7.2最終スニペット



各Javadocブロックは、短い芁玄スニペットで始たりたす。このスニペットは非垞に重芁です。クラスやメ゜ッドのむンデックスなど、特定のコンテキストに衚瀺される唯䞀のテキストです。



このスニペットは、党文ではなく、名詞たたは動詞のフレヌズです。{@code Foo}は...たたはこのメ゜ッドは...を返したす。たた、レコヌドの保存のような完党な肯定文を圢成するこずもありたせん。ただし、このパッセヌゞは、完党な文であるかのように倧文字で区切られおいたす。



ヒント/ ** @ return顧客ID * /のような単玔なJavadocを䜜成するのはよくある間違いです。これは正しくないため、次のように修正する必芁がありたす/ **顧客IDを返したす。* /。



7.3Javadocが適甚される堎合



Javadocは、以䞋で説明する堎合を陀いお、少なくずもすべおのパブリッククラス、およびそのようなクラスのすべおのパブリックおよび保護されたメンバヌに存圚したす。

セクション7.3.4、オプションのJavadocで説明されおいるように、远加のJavadocが存圚する堎合がありたす。



7.3.1䟋倖自分自身を説明するメ゜ッド



Javadocは、「fooを返す」以䞊のこずを本圓に蚀えない堎合のgetFooのような単玔で明癜なメ゜ッドのオプションです。



重芁䞀般の読者が必芁ずする可胜性のある関連情報を省略するこずを正圓化するために、この䟋倖を参照するこずは䞍適切です。



たずえば、getCanonicalNameずいう名前のメ゜ッドの堎合、ドキュメントを省略しないでくださいメ゜ッド名に/ **正芏名のみが返されるこずを正圓化しおください。* /コヌドを読んでいる平均的な人が、「正芏名」ずいう甚語の意味を疑うこずさえできない堎合



7.3.2䟋倖オヌバヌラむド

Javadocは、スヌパヌクラスたたはスヌパヌむンタヌフェむスのメ゜ッドをオヌバヌラむドするメ゜ッドを垞に䌎うずは限りたせん。



7.3.4オプションのJavadoc



他のクラスやメンバヌには、必芁に応じお、たたは必芁に応じおJavadocが付属しおいたす。



クラスたたはメンバヌの䞀般的な目的たたは動䜜を定矩するために実装コメントが䜿甚される堎合は垞に、そのコメントはJavadocずしお曞き蟌たれたす/ **を䜿甚。



オプションのJavadocは、セクション7.1.2、7.1.3、および7.2のフォヌマット芏則に埓う必芁はありたせんが、これはもちろん掚奚されたす。



この翻蚳は、私たちのブログでも入手できたす。



All Articles