Javaプログラミングのルール(命名スタイル、定数定義、コードフォーマット)を詳細に理解する。
名前付きスタイル
1、【強制】コードの名前はすべて下線または米ドル記号で開始できません。下線または米ドル記号で終わることもできません。
反例:_name/_uname/$name/name_/name$
2、【強制】コードの中の命名はピンインと英語を混合する方式を厳禁し、更に直接中国語を使用する方式は許されない。
説明:正しい英語のスペルと文法は読み手に分かりやすく、曖昧さを避けることができます。注意して、純粋なピンインの命名の方式は更に採用を免れます。
本例:renminbi/alibabababa/taobao/youku/hangzhouなど国際的に通用する名称は、英語と同じものが見られます。
反対例:DaZhePromotion[割引]/get PingfenByName()[スコア]/intある変数=3
3、【強制】クラス名はUpperCamelCaseスタイルを使用していますが、以下の場合は例外として、DO/BO/DTX/VO/AO/PO/UIDなどがあります。
本例:JavaServerlessPlatform/UserDO/Xml Service/TcpUdpDeal/TaPromotion
反対例:javaserverlessplotform/UserDo/XMLService/TCPUDPDeal/TAPromotion
4、【強制】方法名、パラメータ名、メンバー変数、局部変数は全部フルパワーCamelCaseスタイルを使用して、必ず猫峰形式に従う。
本例:local Value/getHttp Message()/inputUserId
5、【強制】定数の名前は全部大文字で、単語の間は下線で区切られ、意味表現の完全さを求め、名前が長いのを嫌がらないでください。
正例:MAX_STOCK_COUNT/CACHE_EXPIRED_TIME
反対例:MAX_COUNT/EXPIRED_TIME
6、【強制】抽象類の命名はAbstractまたはBaseで始まる。異常クラス名はExceptionのエンディングを使用します。テストクラスの名前はテストするクラスの名前で始まり、Testで終わります。
7、【強制】タイプは中かっこと隣接して配列を表します。
本例:整形配列を定義するint[]arrayDemo;
反対例:mainパラメータでは、String args[]を用いて定義されます。
8、【強制】POJO類では、ブール型変数にisプレフィックスを加えないでください。そうでないと、一部のフレーム解析は、プログレッシブエラーを引き起こします。
説明:本文のMySQL規約の中の表を作って第一条を約束します。表現はNOの値にis_を採用します。xxxの命名方法は、そのために必要なのです。xxxからxxxへのマッピング関係。
反対例:基本データタイプのBoolean isDeletedと定義されている属性は、その方法もisDeleted()であり、RPCフレームが逆解析された場合、「誤認識」に対応する属性名はdeletedであり、属性が取得できなくなり、さらに異常を抛り出す。
9、【強制】パッケージ名はまとめて小文字を使い、ポイント区切り記号の間には自然意味の英語単語が一つしかない。パッケージ名は単数で統一されていますが、クラス名に複数の意味がある場合、クラス名は複数の形で使用できます。
本例:アプリケーションツール類のパッケージ名はcomp.alibaba.ai.utilで、Message Utils(この規則はspringの枠組み構造を参照)という。
10、「強制」は、子親類のメンバー変数間、または異なるコードブロックのローカル変数間で完全に同じ名前を付けることを避け、可読性を低下させる。
説明:サブクラス、親クラスのメンバー変数名は同じで、publicタイプの変数でもコンパイルできますが、ローカル変数は同じ方法で異なるコードブロックの同名も合法です。ただし、使用を避けるべきです。非setter/getterのパラメータ名もメンバー変数名と同じでないようにします。
反例:
反例:AbstractClassの略語をAbs Classと命名する。conditionの「略語」はcondiと名づけられています。このような随意略語は、コードの読み取り可能性を著しく低下させています。
12、【推奨】コードの自己解釈の目的を達成するために、任意のカスタムプログラミング要素は命名時に、できるだけ完全な単語を組み合わせてその意味を表現します。
正例:JDKでは、原子の更新を表す類名はAtomicReference FieldUpdaterである。
反対例:int aのフリーネーム。
13、【推奨】定数と変数の命名時に、タイプを表す名詞を語尾に置き、視認性を高める。
正例:startTime/work Que/name List/TERMNATED_THREAD_COUNT
反対例:startedAt/Queueue OfWork/listName/COUNT_TERMNATED_THREAD
14、【推奨】モジュール、インターフェース、クラス、方法が設計モードを使用している場合、命名時に具体的なパターンを具現する必要があります。
説明:デザインモデルを名前に反映して、読者の迅速な理解のためのアーキテクチャの設計理念です。
例:
正例:インタフェースメソッド署名void comit();インターフェースの基本常量String COMPANY="alibabababababa"
反対例:インターフェース方法はpublic abstract void f()を定義する。
説明:JDK 8でインターフェースがデフォルトで実現されることができます。このdefault方法は、すべての実装クラスに価値があるデフォルトで実現されます。
16、インターフェースと実現類の命名には二つのルールがあります。
1)【強制】ServiceとDAO類に対して、SOAの理念に基づいて、暴露されたサービスは必ずインターフェースであり、内部の実現類用
Implのサフィックスとインターフェースは違います。
本例:CachecServiceImplはCacheServiceインターフェースを実現します。
2)【推奨】形容能力のインターフェース名であれば、対応する形容詞をインターフェース名とする(通常はケーブルの形容詞)。
本例:AbstractTranslatorはTranslatbaleインターフェースを実現します。
17、【参考】エニュメレーション類名はEnumのサフィックスを持ち、エニュメレーションメンバー名は全大文字で、単語間は下線で区切られます。
説明:列挙とは特殊な類であり、ドメインのメンバーは常数であり、構造方法はデフォルトで強制的に私有である。
例:列挙名はProcessistatus Enumのメンバー名:SUCCESS/UNKNOWN_REASON。
18、【参考】各階の命名規約:
A)Service/DAO層方法命名規約
1)単一のオブジェクトを取得する方法は、getをプレフィックスとする。
2)複数のオブジェクトを取得する方法は、リストをプレフィックスとし、複素形の末尾は、例えば、listObjectとする。
3)統計値を取得する方法は、countをプレフィックスとします。
4)挿入する方法はsave/insertでプレフィックスをします。
5)削除の方法はremove/deleteでプレフィックスをします。
6)修正の方法はudateでプレフィックスをします。
B)分野モデルの命名規約
1)データの対象:xxDO、xxxはデータテーブル名です。
2)データ転送対象:xDTX、xxxは業務領域に関する名称である。
3)展示対象:xVO、xxxは一般的にホームページ名です。
4)POJOはDO/DTX/BO/VOの総称で、xxPOJOと命名することが禁止されています。
定数定義
1、【強制】任意の魔法値(すなわち予め定義されていない定数)が直接コードに現れることは許されません。
反例:
説明:Long a=2 l;数字の21ですか?それともLong型の2ですか?
3、【推奨】一つの常量類を使用してすべての定数を維持しないで、常量機能によって分類し、別々に維持します。
説明:大全の常量類、雑然としていて、検索機能を使って修正の定数を特定できます。理解と維持に役立ちません。
正例:キャッシュ関連の定数はクラスCachConsの下に置く。システム配置に関する定数はクラスConfigConssの下に置く。
4、【推奨】定数の多重層は5層あります。アプリケーションにまたがって定数を共有し、アプリケーション内で定数を共有し、サブプロジェクト内で定数を共有し、
パッケージ内で定数を共有し、クラス内で定数を共有します。
1)アプリケーションにまたがって共有される定数:ライブラリの中に置いて、通常はclient.jarの中のconstantディレクトリの下に置く。
2)アプリケーション内での定数の共有:一方のライブラリにおいて、通常はサブモジュール内のconstantディレクトリの下に置く。
反対例:分かりやすい変数もアプリケーション内共有定数として統一して定義し、両エンジニアはそれぞれ「YES」の変数を定義しています。
クラスA:public static final String YES="yes"
クラスB:public static final String YES="y"
A.YES.equals(B.YES)はtrueと予想されていますが、実際にfalseに戻り、オンライン上の問題を引き起こします。
3)サブプロジェクトの内部共有定数:すなわち現在のサブプロジェクトのconstantディレクトリの下である。
4)パッケージ内の定数を共有する:現在のパッケージの下で単独のconstantディレクトリである。
5)クラスの共有定数:直接クラスの内部prvate static finalで定義する。
5【推奨】変数値が一定の範囲内でしか変化しない場合は、enumタイプで定義します。
説明:名称以外の拡張属性があれば、enumタイプを使います。以下の例の数字は拡張情報です。一年間の数字を表します。
いくつかの季節。
例:
1、【強制】大括弧内が空であれば、{}簡潔に書けばいいです。大括弧の中には改行やスペースが必要ありません。空のコードブロックでない場合:
1)左大かっこの前で改行しない。
2)左大かっこの後、改行します。
3)右大かっこの前で改行します。
4)右大かっこの後にelseなどのコードがあれば改行しない。終了した右大かっこを表します。改行しなければなりません。
2、左の括弧と文字の間にはスペースがありません。同様に、右の括弧と文字の間にもスペースがありません。左の大かっこの前にはスペースが必要です。詳細は第5条の下の正例の提示を参照してください。
反例:if(スペースa=bスペース)
3、【強制】if/for/while/switch/doなどの保留文字と括弧の間にスペースを入れる必要があります。
4、【強制】任意の2つ、3つの演算子の左右にスペースを追加します。
説明:演算子は、割当演算子=、論理演算子&&&&&、減算記号などを含みます。
5、【強制】4つのスペースでインデントし、tab文字の使用を禁止します。
説明:tabを使ってインデントするなら、1つのtabを4つのスペースに設定しなければなりません。IDEA設定tabが4つのスペースの場合、Use tab characterにチェックしないでください。また、eclipseではinsert spaces for tabsにチェックを付けなければなりません。
正例:(1-5点に及ぶ)
例:
1、【強制】コードの名前はすべて下線または米ドル記号で開始できません。下線または米ドル記号で終わることもできません。
反例:_name/_uname/$name/name_/name$
2、【強制】コードの中の命名はピンインと英語を混合する方式を厳禁し、更に直接中国語を使用する方式は許されない。
説明:正しい英語のスペルと文法は読み手に分かりやすく、曖昧さを避けることができます。注意して、純粋なピンインの命名の方式は更に採用を免れます。
本例:renminbi/alibabababa/taobao/youku/hangzhouなど国際的に通用する名称は、英語と同じものが見られます。
反対例:DaZhePromotion[割引]/get PingfenByName()[スコア]/intある変数=3
3、【強制】クラス名はUpperCamelCaseスタイルを使用していますが、以下の場合は例外として、DO/BO/DTX/VO/AO/PO/UIDなどがあります。
本例:JavaServerlessPlatform/UserDO/Xml Service/TcpUdpDeal/TaPromotion
反対例:javaserverlessplotform/UserDo/XMLService/TCPUDPDeal/TAPromotion
4、【強制】方法名、パラメータ名、メンバー変数、局部変数は全部フルパワーCamelCaseスタイルを使用して、必ず猫峰形式に従う。
本例:local Value/getHttp Message()/inputUserId
5、【強制】定数の名前は全部大文字で、単語の間は下線で区切られ、意味表現の完全さを求め、名前が長いのを嫌がらないでください。
正例:MAX_STOCK_COUNT/CACHE_EXPIRED_TIME
反対例:MAX_COUNT/EXPIRED_TIME
6、【強制】抽象類の命名はAbstractまたはBaseで始まる。異常クラス名はExceptionのエンディングを使用します。テストクラスの名前はテストするクラスの名前で始まり、Testで終わります。
7、【強制】タイプは中かっこと隣接して配列を表します。
本例:整形配列を定義するint[]arrayDemo;
反対例:mainパラメータでは、String args[]を用いて定義されます。
8、【強制】POJO類では、ブール型変数にisプレフィックスを加えないでください。そうでないと、一部のフレーム解析は、プログレッシブエラーを引き起こします。
説明:本文のMySQL規約の中の表を作って第一条を約束します。表現はNOの値にis_を採用します。xxxの命名方法は、そのために必要なのです。xxxからxxxへのマッピング関係。
反対例:基本データタイプのBoolean isDeletedと定義されている属性は、その方法もisDeleted()であり、RPCフレームが逆解析された場合、「誤認識」に対応する属性名はdeletedであり、属性が取得できなくなり、さらに異常を抛り出す。
9、【強制】パッケージ名はまとめて小文字を使い、ポイント区切り記号の間には自然意味の英語単語が一つしかない。パッケージ名は単数で統一されていますが、クラス名に複数の意味がある場合、クラス名は複数の形で使用できます。
本例:アプリケーションツール類のパッケージ名はcomp.alibaba.ai.utilで、Message Utils(この規則はspringの枠組み構造を参照)という。
10、「強制」は、子親類のメンバー変数間、または異なるコードブロックのローカル変数間で完全に同じ名前を付けることを避け、可読性を低下させる。
説明:サブクラス、親クラスのメンバー変数名は同じで、publicタイプの変数でもコンパイルできますが、ローカル変数は同じ方法で異なるコードブロックの同名も合法です。ただし、使用を避けるべきです。非setter/getterのパラメータ名もメンバー変数名と同じでないようにします。
反例:
public class ConfusingName {
public int age;
// setter/getter ,
public void getData(String alibaba) {
if(condition) {
final int money = 531;
// ...
}
for (int i = 0; i < 10; i++) {
// , money
final int money = 615;
// ...
}
}
}
class Son extends ConfusingName {
// public int age;
}
11、【強制】完全に不規範な略語を根絶し、望文の意味がわからないことを避ける。反例:AbstractClassの略語をAbs Classと命名する。conditionの「略語」はcondiと名づけられています。このような随意略語は、コードの読み取り可能性を著しく低下させています。
12、【推奨】コードの自己解釈の目的を達成するために、任意のカスタムプログラミング要素は命名時に、できるだけ完全な単語を組み合わせてその意味を表現します。
正例:JDKでは、原子の更新を表す類名はAtomicReference FieldUpdaterである。
反対例:int aのフリーネーム。
13、【推奨】定数と変数の命名時に、タイプを表す名詞を語尾に置き、視認性を高める。
正例:startTime/work Que/name List/TERMNATED_THREAD_COUNT
反対例:startedAt/Queueue OfWork/listName/COUNT_TERMNATED_THREAD
14、【推奨】モジュール、インターフェース、クラス、方法が設計モードを使用している場合、命名時に具体的なパターンを具現する必要があります。
説明:デザインモデルを名前に反映して、読者の迅速な理解のためのアーキテクチャの設計理念です。
例:
public class OrderFactory;
public class LoginProxy;
public class ResourceObserver;
15、【推奨】インターフェースクラスの方法と属性は、任意の修飾記号を加えないでください。コードの簡潔性を維持し、有効なJavadocの注釈を加えます。できるだけインターフェースで変数を定義しないでください。変数を定義するなら、インターフェースメソッドと関連しています。そしてアプリケーション全体の基礎定数です。正例:インタフェースメソッド署名void comit();インターフェースの基本常量String COMPANY="alibabababababa"
反対例:インターフェース方法はpublic abstract void f()を定義する。
説明:JDK 8でインターフェースがデフォルトで実現されることができます。このdefault方法は、すべての実装クラスに価値があるデフォルトで実現されます。
16、インターフェースと実現類の命名には二つのルールがあります。
1)【強制】ServiceとDAO類に対して、SOAの理念に基づいて、暴露されたサービスは必ずインターフェースであり、内部の実現類用
Implのサフィックスとインターフェースは違います。
本例:CachecServiceImplはCacheServiceインターフェースを実現します。
2)【推奨】形容能力のインターフェース名であれば、対応する形容詞をインターフェース名とする(通常はケーブルの形容詞)。
本例:AbstractTranslatorはTranslatbaleインターフェースを実現します。
17、【参考】エニュメレーション類名はEnumのサフィックスを持ち、エニュメレーションメンバー名は全大文字で、単語間は下線で区切られます。
説明:列挙とは特殊な類であり、ドメインのメンバーは常数であり、構造方法はデフォルトで強制的に私有である。
例:列挙名はProcessistatus Enumのメンバー名:SUCCESS/UNKNOWN_REASON。
18、【参考】各階の命名規約:
A)Service/DAO層方法命名規約
1)単一のオブジェクトを取得する方法は、getをプレフィックスとする。
2)複数のオブジェクトを取得する方法は、リストをプレフィックスとし、複素形の末尾は、例えば、listObjectとする。
3)統計値を取得する方法は、countをプレフィックスとします。
4)挿入する方法はsave/insertでプレフィックスをします。
5)削除の方法はremove/deleteでプレフィックスをします。
6)修正の方法はudateでプレフィックスをします。
B)分野モデルの命名規約
1)データの対象:xxDO、xxxはデータテーブル名です。
2)データ転送対象:xDTX、xxxは業務領域に関する名称である。
3)展示対象:xVO、xxxは一般的にホームページ名です。
4)POJOはDO/DTX/BO/VOの総称で、xxPOJOと命名することが禁止されています。
定数定義
1、【強制】任意の魔法値(すなわち予め定義されていない定数)が直接コードに現れることは許されません。
反例:
String key = "Id#taobao_" + tradeId;
cache.put(key, value);
// get , , ,
2、【強制】longまたはLongに値を付与する場合、数値の後に大文字のLを使用して、小文字のlではなく、小文字は数字1と混同しやすく、誤解されます。説明:Long a=2 l;数字の21ですか?それともLong型の2ですか?
3、【推奨】一つの常量類を使用してすべての定数を維持しないで、常量機能によって分類し、別々に維持します。
説明:大全の常量類、雑然としていて、検索機能を使って修正の定数を特定できます。理解と維持に役立ちません。
正例:キャッシュ関連の定数はクラスCachConsの下に置く。システム配置に関する定数はクラスConfigConssの下に置く。
4、【推奨】定数の多重層は5層あります。アプリケーションにまたがって定数を共有し、アプリケーション内で定数を共有し、サブプロジェクト内で定数を共有し、
パッケージ内で定数を共有し、クラス内で定数を共有します。
1)アプリケーションにまたがって共有される定数:ライブラリの中に置いて、通常はclient.jarの中のconstantディレクトリの下に置く。
2)アプリケーション内での定数の共有:一方のライブラリにおいて、通常はサブモジュール内のconstantディレクトリの下に置く。
反対例:分かりやすい変数もアプリケーション内共有定数として統一して定義し、両エンジニアはそれぞれ「YES」の変数を定義しています。
クラスA:public static final String YES="yes"
クラスB:public static final String YES="y"
A.YES.equals(B.YES)はtrueと予想されていますが、実際にfalseに戻り、オンライン上の問題を引き起こします。
3)サブプロジェクトの内部共有定数:すなわち現在のサブプロジェクトのconstantディレクトリの下である。
4)パッケージ内の定数を共有する:現在のパッケージの下で単独のconstantディレクトリである。
5)クラスの共有定数:直接クラスの内部prvate static finalで定義する。
5【推奨】変数値が一定の範囲内でしか変化しない場合は、enumタイプで定義します。
説明:名称以外の拡張属性があれば、enumタイプを使います。以下の例の数字は拡張情報です。一年間の数字を表します。
いくつかの季節。
例:
public enum SeasonEnum {
SPRING(1), SUMMER(2), AUTUMN(3), WINTER(4);
private int seq;
SeasonEnum(int seq) {this.seq = seq;}
public int getSeq() {return seq;}
}
コードの書式1、【強制】大括弧内が空であれば、{}簡潔に書けばいいです。大括弧の中には改行やスペースが必要ありません。空のコードブロックでない場合:
1)左大かっこの前で改行しない。
2)左大かっこの後、改行します。
3)右大かっこの前で改行します。
4)右大かっこの後にelseなどのコードがあれば改行しない。終了した右大かっこを表します。改行しなければなりません。
2、左の括弧と文字の間にはスペースがありません。同様に、右の括弧と文字の間にもスペースがありません。左の大かっこの前にはスペースが必要です。詳細は第5条の下の正例の提示を参照してください。
反例:if(スペースa=bスペース)
3、【強制】if/for/while/switch/doなどの保留文字と括弧の間にスペースを入れる必要があります。
4、【強制】任意の2つ、3つの演算子の左右にスペースを追加します。
説明:演算子は、割当演算子=、論理演算子&&&&&、減算記号などを含みます。
5、【強制】4つのスペースでインデントし、tab文字の使用を禁止します。
説明:tabを使ってインデントするなら、1つのtabを4つのスペースに設定しなければなりません。IDEA設定tabが4つのスペースの場合、Use tab characterにチェックしないでください。また、eclipseではinsert spaces for tabsにチェックを付けなければなりません。
正例:(1-5点に及ぶ)
public static void main(String[] args) {
// 4 String say = "hello";
// int flag = 0;
// if , f ,0 if (flag == 0) {
System.out.println(say); }
// ; if (flag == 1) {
System.out.println("world");
// , else,
} else {
System.out.println("ok");
// , }
}
6、【強制】コメントの二重斜線と注釈の内容の間には一箇所のスペースがあります。例:
// , String param = new String();
以上が本文の全部です。皆さんの勉強に役に立つように、私たちを応援してください。