コヌドスタむルのガむドラむン

Java蚀語の芏則



暙準のJavaコヌド芏則に埓いたす。 それらにいく぀かのルヌルを远加したした

  1. 䟋倖説明なしにそれらを傍受たたは無芖しないでください。
  2. 䟋倖スタックのルヌトで、ラむブラリ内のコヌドを陀き、䞀般化された䟋倖を䜿甚しないでください。
  3. ファむナラむザヌそれらを䜿甚しないでください。
  4. むンポヌトむンポヌトを完党に指定したす。




Javaラむブラリルヌル



Android甚のJavaラむブラリずツヌルの䜿甚に関しおは合意がありたす。 堎合によっおは、たずえば、承認されおいないパタヌンたたはラむブラリを䜿甚する可胜性のある叀いコヌドを䜿甚するなど、芏則を倉曎できたす。



Javaスタむルのルヌル



すべおのファむルのスタむルが䞀貫しおいるず、プログラムのメンテナンスがはるかに簡単になりたす。 Sunは、Javaプログラミング蚀語のコヌド芏玄で定矩されおいる暙準のJavaプログラミングスタむルに埓いたすが、いく぀かの䟋倖ず远加がありたす。 このスタむルガむドは包括的か぀包括的であり、Javaコミュニティでも広く䜿甚されおいたす。



さらに、コヌドには次のルヌルを䜿甚する必芁がありたす。

  1. コメント/ Javadocそれらを曞いおください。 暙準スタむルを䜿甚したす。
  2. 短いメ゜ッド巚倧なメ゜ッドを䜜成しないでください。
  3. フィヌルドファむルの先頭、たたはそれらを䜿甚するメ゜ッドの盎前になければなりたせん。
  4. ロヌカル倉数スコヌプを制限したす。
  5. むンポヌトandroid; サヌドパヌティアルファベット順; Javax
  6. むンデントタブなしの4぀のスペヌス。
  7. 行の長さ100文字。
  8. フィヌルド名非パブリックおよび非静的フィヌルドは「m」で始たりたす。
  9. 䞭括匧開き䞭括匧は別の行にありたせん。
  10. 泚釈暙準の泚釈を䜿甚したす。
  11. 略語略語を名前の単語ずしお䜿甚したす。たずえば、XmlHttpRequest、getUrlなど。
  12. TODOスタむル「TODOここに説明を曞いおください。」
  13. 䞀貫性あなたの呚りを芋おください。


Java蚀語の芏則



䟋倖を無芖しないでください


たずえば、䟋倖を無芖するコヌドを蚘述できたす。

void setServerPort(String value) { try { serverPort = Integer.parseInt(value); } catch (NumberFormatException e) { } }
      
      





絶察にしないでください。 コヌドがこのような状態に遭遇するこずは決しおないず思うか、この状態を凊理するこずは重芁ではないず思いたすが、䟋倖を無芖するず隠れた問題が生じたす。 基本的にすべおの䟋倖を凊理する必芁がありたす。 それぞれの堎合の詳现は、状況によっお異なりたす。

蚱容可胜な代替



䞀般的な䟋倖をキャッチしたせん


䟋倖凊理が面倒で、次のような蚘述をしたい堎合がありたす。

 try { someComplicatedIOFunction(); // may throw IOException someComplicatedParsingFunction(); // may throw ParsingException someComplicatedSecurityFunction(); // may throw SecurityException // phew, made it all the way } catch (Exception e) { // I'll just catch all exceptions handleError(); // with one generic handler! }
      
      





あなたはそれをするべきではありたせん。 䞀番䞋の行は、予期しない䟋倖が存圚する可胜性があり、その結果、アプリケヌションレベルで゚ラヌがキャッチされるこずです。 ぀たり、誰かが新しいタむプの䟋倖を远加した堎合、コンパむラはこれが別の゚ラヌであるこずを理解するのを助けるこずができたせん。



この芏則にはたれな䟋倖がありたす特定のテストコヌド、たたはすべおの皮類の゚ラヌをむンタヌセプトするトップレベルコヌド゚ラヌがナヌザヌむンタヌフェむスに衚瀺されないようにするため、たたは䜕らかの皮類のバッチタスクを続行するため。



䞀般的な䟋倖の代替



芚えおおいおください䟋倖はあなたの友達です コンパむラヌがそれらをキャッチしおいないこずを瀺すずき、怒っおはいけたせん。



ファむナラむザヌ


抂芁ファむナラむザは、オブゞェクトがガベヌゞコレクタによっお収集される前にプログラムコヌドを実行する方法です。

長所 特に倖郚リ゜ヌスのクリヌニングに圹立぀堎合がありたす。

短所 ファむナラむザがい぀呌び出されるか、䞀般的にはファむナラむザが呌び出されるかどうかは保蚌されたせん。



解決策 ファむナラむザヌを䜿甚したせん。 ほずんどの堎合、ファむナラむザに必芁なものはすべお、䟋倖凊理でできたす。 ファむナラむザヌが本圓に必芁な堎合は、closeメ゜ッドを宣蚀し、正確に呌び出されるタむミングを文曞化したす。



茞入品


むンポヌトのワむルドカヌド


抂芁 fooパッケヌゞのBarクラスを䜿甚する堎合、これを行うには2぀の方法がありたす。

  1.  import foo.*;
          
          



  2.  import foo.Bar;
          
          





プロ1 可胜性のあるimportステヌトメントの数を朜圚的に枛らしたす。

プロ2 実際に䜿甚されおいるクラスを明確にしたす。 コヌドをサポヌトする人にずっおコヌドを読みやすくしたす。



解決策 スタむル2を䜿甚しお、Androidコヌドをむンポヌトしたす。 明瀺的な䟋倖は、暙準ラむブラリjava.util。*、Java.io。*などおよび単䜓テストコヌドjunit.framework。*に察しお䜜成されたす。



コメント/ Javadoc



各ファむルには、最初に著䜜暩衚瀺が必芁です。 次に、パッケヌゞずむンポヌト文の宣蚀があり、各ブロックは空の文字列で区切られおいたす。 その埌にクラスたたはむンタヌフェむスの宣蚀が続きたす。 クラスの動䜜をJavadocコメントで説明したす。

 /* * Copyright (C) 2010 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.internal.foo; import android.os.Blah; import android.view.Yada; import java.sql.ResultSet; import java.sql.SQLException; /** * Does X and Y and provides an abstraction for Z. */ public class Foo { ... }
      
      





各クラスおよび重芁なパブリックメ゜ッドには、その動䜜を説明する少なくずも1぀のフレヌズを含むJavadocが含たれおいる必芁がありたす。 フレヌズは3人称の説明動詞で始たる必芁がありたす。 䟋

 /** Returns the correctly rounded positive square root of a double value. */ static double sqrt(double a) { } /** * Constructs a new String by converting the specified array of * bytes using the platform's default character encoding. */ public String(byte[] bytes) { }
      
      





Javadocで「sets Foo」のみず衚瀺されおいる堎合、setFooのような単玔なgetおよびsetメ゜ッドのJavadocを蚘述する必芁はありたせん。 メ゜ッドがより耇雑なこずを行う堎合たずえば、特定の制限を遵守する堎合、たたはそのアクションがそれ自䜓の倖偎で重芁な効果を発揮する堎合、文曞化する必芁がありたす。 そしお、これがFooの意味の単なる説明ではない堎合は、それも文曞化する必芁がありたす。



䞀般に、Javadocがパブリックであるかどうかに関係なく、䜜成したメ゜ッドはすべおJavadocから恩恵を受けたす。 パブリックメ゜ッドはAPIの䞀郚であるため、Javadocでの説明が必芁です。



Javadocを䜜成するには、 Sun Javadocの芏則に埓う必芁がありたす。



短い方法



メ゜ッドは小さく、特定の問題を可胜な限り解決する必芁がありたす。 ただし、倧きなメ゜ッドが有甚な堎合があるため、メ゜ッドの長さに厳密な制限はありたせん。 メ゜ッドが40行を超える堎合は、プログラムの構造に違反するこずなく分割できるかどうかを怜蚎する必芁がありたす。



ロヌカル倉数



ロヌカル倉数のスコヌプは最小化する必芁がありたす。 これにより、コヌドの可読性ず保守性が向䞊し、゚ラヌの可胜性が枛少したす。 各倉数は、倉数を䜿甚するすべおの可胜な堎所を囲む最も深いブロックで宣蚀する必芁がありたす。



ロヌカル倉数は、最初に䜿甚する必芁がある堎所で宣蚀する必芁がありたす。 ほずんどすべおのロヌカル倉数には初期化子が必芁です。 それでも倉数を正確に初期化する方法がわからない堎合は、それがわかるたでその宣蚀を延期する必芁がありたす。



try-catchブロックには1぀の䟋倖がありたす。 チェック䟋倖をスロヌするメ゜ッドのreturnステヌトメントを䜿甚しお倉数を初期化する堎合、tryブロックで初期化する必芁がありたす。 倉数をtryブロックの倖偎で䜿甚する必芁がある堎合は、倉数をその前で宣蚀したす。倉数を正確に初期化する方法を知っおいおもかたいたせん。

 // Instantiate class cl, which represents some sort of Set Set s = null; try { s = (Set) cl.newInstance(); } catch(IllegalAccessException e) { throw new IllegalArgumentException(cl + " not accessible"); } catch(InstantiationException e) { throw new IllegalArgumentException(cl + " not instantiable"); } // Exercise the set s.addAll(Arrays.asList(args));
      
      





ただし、この堎合でも、メ゜ッドにtry-catchブロックをカプセル化するこずで回避できたす。

 Set createSet(Class cl) { // Instantiate class cl, which represents some sort of Set try { return (Set) cl.newInstance(); } catch(IllegalAccessException e) { throw new IllegalArgumentException(cl + " not accessible"); } catch(InstantiationException e) { throw new IllegalArgumentException(cl + " not instantiable"); } } ... // Exercise the set Set s = createSet(cl); s.addAll(Arrays.asList(args));
      
      





ルヌプ内の倉数は、乗り越えられない理由がない限り、ステヌトメント自䜓の䞭で宣蚀する必芁がありたす。

 for (int i = 0; i <= n; i++) { doSomething(i); } for (Iterator i = c.iterator(); i.hasNext(); ) { doSomethingElse(i.next()); }
      
      







茞入品



むンポヌト文の順序は次のずおりです。

  1. Androidのむンポヌト。
  2. サヌドパヌティのむンポヌトcom、junit、net、org。
  3. javaおよびjavax。


IDE蚭定に完党に準拠するには、むンポヌトは次のようになりたす。



なんで

順序は次のずおりです。



くがみ



ブロックには4぀のスペヌスを䜿甚したす。 タブは䜿甚したせん。 関数呌び出しや割り圓おを含む改行には、たずえば次のように8぀のスペヌスを䜿甚したす。

 Instrument i = someLongExpression(that, wouldNotFit, on, one, line);
      
      





そしおずおも間違っおいたす

 Instrument i = someLongExpression(that, wouldNotFit, on, one, line);
      
      





フィヌルド名





䟋

 public class MyClass { public static final int SOME_CONSTANT = 42; public int publicField; private static MyClass sSingleton; int mPackagePrivate; private int mPrivate; protected int mProtected; }
      
      





䞭括匧



䞭括匧を開く堎合、別の行は匷調衚瀺されず、前のコヌドず同じ行にありたす。

 class MyClass { int func() { if (something) { // ... } else if (somethingElse) { // ... } else { // ... } } }
      
      





条件ステヌトメントには䞭括匧が必芁です。 䟋倖は、条件ステヌトメントずその本䜓が同じ行に配眮されおいる堎合です。 ぀たり、次のように曞くこずができたす。

 if (condition) { body(); // ok } if (condition) body(); // ok
      
      





しかし、それは䞍可胜です。

 if (condition) body(); // bad
      
      





行の長さ



コヌド内の各テキスト行は、100文字以内にする必芁がありたす。

䟋倖コメントにサンプルコマンドたたはURLが含たれる堎合コピヌ/貌り付けを䜿甚する方が䟿利です。

䟋倖むンポヌト文字列は100文字を超える堎合がありたす。これは人々がめったに芋ないためです。 たた、ツヌルの䜜成が簡単になりたす。



名前の略語



頭字語ず略語を単語ず考えおください。 名前はより読みやすくなりたす

よし 悪い
XmlHttpRequest XMLHTTPRequest
getCustomerId getCustomerID


このスタむルは、略語ず略語がフルネヌムの堎合にも適甚されたす。

よし 悪い
クラスhtml クラスHTML
文字列のURL。 文字列URL
ロングID; 長いID;




TODOスタむル



䞀時的、短期的、たたは良いが理想的ではないコヌドにはTODOコメントを䜿甚したす。 コメントには「TODO」を含める必芁がありたす。䟋

 // TODO: Remove this code after the UrlTable2 has been checked in. // TODO: Change this to use a flag instead of a constant.
      
      





コメントが「将来䜕かをする」の堎合は、特定の日付2011幎1月1日、たたは特定の「バヌゞョン2.1以降の削陀」むベントが含たれおいるこずを確認しおください。



コヒヌレンス



コヌドを倉曎する堎合は、呚囲のコヌドを芋おそのスタむルを刀断するために少し時間がかかりたす。 スペヌスが䜿甚されおいる堎合は、それらを䜿甚する必芁がありたす。 コメントに小さな星のセットが含たれおいる堎合は、それらを䜿甚する必芁がありたす。



コヌドスタむルガむドラむンのポむントは、共通の語圙を䜜成しお、人々が蚀うこずではなく、話すこずに集䞭できるようにするこずです。 人々がこの語圙を理解できるように、グロヌバルスタむルルヌルを導入したす。 しかし、地元のスタむルも重芁です。 ファむルに远加するコヌドが元のコヌドず倧きく異なる堎合、これにより将来の読者はリズムから倖れ、構造を理解できなくなりたす。 これを避けるようにしおください。



All Articles