【Java】エレガントなコードはエレガントな書き方が必要

6955 ワード

優秀なプログラマーの皆さん、JDKのソースコードといくつかの優秀な業務、フレームワークのソースコードを何度も読んだことがあると信じていますが、コードの難しさではなく、コードの規範の程度のためです.良いコードは、十分な技術レベルを持っている上で、十分に目を楽しませる書く規範で皆さんに提示されるに違いありません.
この文章は技術を話さないで、Java言語の設計の方面の文法の問題を浅く話します.
まず、いくつかの一般的な書き方を紹介します.
アルパカ式命名法(Lower-Caml-Case):(小さい)アルパカ式命名法はJavaが推奨する書く文法で、命名フィールドに複数の単語があれば、最初の単語の頭文字を小文字にし、その後の単語の頭文字を大文字にする必要があります.
public String lowerCamelCase(){}

 
パスカル命名法(Upper Camel Case):パスカル命名法はアルパカ命名法とも呼ばれ、C#が推奨する書く文法であり、命名フィールドのすべての単語の頭文字を大文字にし、Javaでは通常クラス名の書くこととして用いられる.
public void UpperCamelCase(){}

ハンガリー命名法(Hungarian nomenclature):ハンガリー命名法はハンガリーのプログラマーが発明した命名法で、命名前に通常対応する数値タイプを加えることを要求している.
private String szString;

本稿ではJava言語に対して,アルパカ式命名法を基準とし,他の命名法を習得すればよい.
Java文法規範は基本的にJDKソースコード規範に従って書く:
命名規則
名前はアルファベット、数字、下線、$記号のみで構成され、数字で始まることはできません.一般的に、開発者はわざわざドル記号や下線を先頭文字として使用しません.
名前にはJAVAのキーワードや予約文字は使用できません.Java会将JAvaファイルをコンパイルする.classのバイトコードファイルは、変数名をJavaのキーワードまたは予約ワードに設定すると、コンパイル中に変数名をキーワードまたは予約ワードとして処理し、コンパイル時に異常が発生します.
 
使用を推奨しない
漢字やピンインで命名することは推奨されません.実際の開発環境では、1つのプロジェクトは複数のスタッフに割り当てられて共同で完成するので、中国語やピンインを混同する方式で命名しないでください.また、一部のワークグループには外国人の友人がいます.必ず世界共通言語、英語で名前を標準化し、中国語や中国語のピンインの書く形式を採用しないでください.スタンダードネーミングも自分の英語学習を促進しているのではないでしょうか.
 
ネーミング仕様
プロジェクト名の小文字.プロジェクト名の小文字は美観のためで、しかも次の項目と相補的です↓
パッケージ名の小文字.パッケージ名は1つのディレクトリの名前で、名前の作用を果たすだけではなくて、またディレクトリの作用を果たすことができて、名前はプログラマーのパッケージの作用を知らせて、ディレクトリはプログラマーにこのパッケージの機能を教えて、できるだけパッケージの名前を抽象的にして、やっと含む作用を果たすことができて、例えばSSMの中のパッケージ名はいつもcontroller、dao、pojo、service.....具体的にはどのパッケージにどんなクラスが含まれているのか、コードを初めて見たプログラマーでも推測できるでしょうが、controller層の下にはいろいろな具体的なcontrollerクラスがあるに違いありません.
package com.alibaba.fastjson ->  JSON
                             ->  JSONArray
                             ->  JSONObject

クラス名はパスカル命名法によって命名される.オブジェクト向けのプログラミング言語として,クラスのネーミングは通常の変数ネーミングと区別されるが,どのように区別するかは,パスカルネーミング法とアルパカ式ネーミング法の違いである.
変数名、メソッド名はアルパカ式命名法で命名される.
定数名はすべて大文字です.Javaの文法には特殊な変数、すなわち定数がありますが、変数と定数の違いをどのように区別しますか?Javaでは,定数の書写では,定数名にMathクラスの定数πの命名のような大文字をすべて採用することが要求される.

    /**
     * The {@code double} value that is closer than any other to
     * pi, the ratio of the circumference of a circle to its
     * diameter.
     */
    public static final double PI = 3.14159265358979323846;

コメント
Javaのコメントは主に3つに分けられます.
文間の注釈として一般的に使用され、ArrayListソースコードのGC処理に対する注釈など、理解しにくい文や注意すべき文に対する注意.
private void fastRemove(int index) {
        modCount++;
        int numMoved = size - index - 1;
        if (numMoved > 0)
            System.arraycopy(elementData, index+1, elementData, index,
                             numMoved);
        elementData[--size] = null; // clear to let GC do its work
    }

複数行の注釈は、一般的に大きな注釈に使用されますが、Javadocには記録されません.
/*

   Multi-line comment

*/

ドキュメント注釈、一般的に大きな注釈に使用され、Javadocに記録され、HTMLラベルを埋め込むことができ、JavadocではStringクラスのvalue[]注釈などのHTMLドキュメントで表示されます.
/** The value is used for character storage. */
    private final char value[];

注記修飾
注釈の存在は、コードがよりきれいで美しいことを試してみることができます.以下はいくつかの一般的な注釈です.
@Override:オブジェクト言語向けの4つの特徴で、継承抽象多態をカプセル化し、クラスとクラスの間に継承関係が発生し、そのスーパークラスメソッドを書き換える場合は、@Override注記を明記します.
 @Override
    public String toString() {
        return "HelloWorld";
    }
@Deprecated:  @Deprecated                ,     ,     ,  @Deprecated                          。  String           String(byte ascii[], int hibyte)。
    @Deprecated
    public String(byte ascii[], int hibyte) {
        this(ascii, hibyte, 0, ascii.length);
    }

@param:@paramはパラメータメソッドのあるドキュメントコメントに作用し、入力パラメータの意味を説明し、他の開発者がコードの読み取りや論理開発を容易にするために使用されます.一般的なフォーマットは@param parameterName referenceです.
@return:@return戻り値のあるメソッドのドキュメントコメントでは、戻り値の意味を示すために使用され、他の開発者がコードの読み取りや論理開発を容易にするための一般的なフォーマットは@return referenceです.
@see:@seeは、ドキュメント注記で使用され、メソッドまたはクラスが参照できるオブジェクトを指定します.@seeの後にclassNameを付けるとclassNameクラスが参照できることを示し、methodNameを付けると、このクラスのmethodNameメソッドが参照できることを示します.
一般的な形式は@see classNameです
                   @see #methodName
SpringのStringUtilsクラスhasLengthメソッドのドキュメントコメントには、htmlタグや@codeなどのコメントが混ざっており、興味があれば自分で勉強することができます.
	/**
	 * Check that the given {@code CharSequence} is neither {@code null} nor
	 * of length 0.
	 * 

Note: this method returns {@code true} for a {@code CharSequence} * that purely consists of whitespace. *


	 * StringUtils.hasLength(null) = false
	 * StringUtils.hasLength("") = false
	 * StringUtils.hasLength(" ") = true
	 * StringUtils.hasLength("Hello") = true
	 * 
* @param str the {@code CharSequence} to check (may be {@code null})
* @return {@code true} if the {@code CharSequence} is not {@code null} and has length
* @see #hasText(String)
*/
public static boolean hasLength(@Nullable CharSequence str) {
return (str != null && str.length() > 0);
}

の とはJava に った の で、コードの 、 をさらに させる であり、 なプログラマーの を している.
には があり、 とは. レベルのプロジェクトグループでは、 がgitを じてコード の と を う があり、コード の さはコードの を めることができる.
コード の さが すぎることを けない. やクラスの の わりに のアルファベットを うプログラマーが く、コードの が めて い.プログラマーの がcowalであれば、 も を できない.これもJDKソースコードの でそれをCopyOnWriteArrayList(java.util.aoncurrent)と する で、ソースコードはまだ けられないが、プログラマーはどんな で を うのだろうか.
java.util.concurrent.CopyOnWriteArrayList;

インタフェースネーミングは を する:インタフェース けプログラミングは でよく られるが、 つのインタフェースは のクラスで できる. つのインタフェースにも くのクラスの がある.つまり、このインタフェースの はすべての クラスの であるため、 をインタフェースの として である. えばJDKのインタフェース :
Serializable,Callable,Runnable....

インタフェース のメソッドはpublicキーワードを かず、 はfinalキーワードを かない. くのプログラマーは、いくつかの たちが なくインタフェースの の の にpublicキーワードを えることができますが、 にソースコードをよく んだことがある は、JDKソースでも なフレームソースでも、Interfaceの はpublicキーワードを たないので、 はfinalキーワードを たないので、 くも くもないように えます. なコードに するプログラマーの とあこがれです.
static コードブロックを して を います.final staticと する がグローバルクラス であることはよく られていますが、 に しなければならないのは、 が され、 に で すればよいので、 が な はstatic ブロックを いて することをお めします.これにより、 なる の を することができ、コードの を させることができます.たとえば
public final static String string = "Hello world";

public final static size;

static{
   size = string.length();
}

staticを して インポート: じツールクラスで じ メソッドを する がある 、static インポートを います.これにより、メソッドを するときにクラス をマークする がなくなり、コード を できます.たとえば、JDKのMathクラスの メソッドを1つのクラスで り し する 、 インポートではメソッドのみをインポートでき、クラスはインポートできませんが、*ワイルドカードではワイルドカードでインポートできます. なフォーマットは:import static project.package.class.method;
Mathクラスのすべての メソッドをインポートします.
import static java.lang.Math.*;

 
 
は を することができて、 は で、 は として えず して しなければならなくて、 の なプログラマー がもっと なコードを くことができることを みます.
-by decmoon