2

変数が伝えようとしていることを適切かつ正確に説明する変数名を使用することを強調する人がよくいます。これは、一言や二言で行うのは非常に難しいこともよくあります。通常、長い名前の方が受け入れられやすいのは事実ですが、単なる混乱のためにコードがさらに読みにくくなることがよくあります。変数が何を伝えるかを理解すると、その名前はその理解の別名にすぎず、名前自体が必ずしも違いを生むとは限らないことがわかります。その場合、私はほとんどの場合、長い名前よりも短い名前を好みます。

短い変数名を使用することは適切ですか? アルゴリズムやクラスの残りの部分を見ないと必ずしも理解できないが、変数の宣言またはアルゴリズムの開始時にコメントされている可能性がある名前を使用することは許容されますか? それとも、意味をすぐに明確に伝える長い名前を付けた方が一般的に常に望ましいのでしょうか?

4

4 に答える 4

3

私にとって、短い (不可解な) 名前は 1 か所だけで口に合います。forまたはforeachループのインデックス変数。

これは、 i、j、kなどの for インデックス変数に何年もさらされているためだと思います...そして一般的に、ループ本体が同じページで使用と宣言を見るのに十分短いためです。

全体として、コンテキストに意味のある名前を付けるのに少し時間を費やして、それを使用してください!

于 2013-08-31T14:31:57.173 に答える
2

longerスコープ変数には - より長く、よりわかりやすい名前が付けられていshouldます


短い範囲

List<String> result = new ArrayList<String>();
for(String c: cities){
    if(c.contains("CO")){
        result.add(c);
    }    
}

c何を意味するかは明らかです。cスコープが短いため、すぐにそれが何であるかを知ることができます。

ロングスコープ

clone メソッドの HashSet 実装を見てみましょう。

private transient HashMap<E,Object> map;
...

public Object clone() {
        try {
            HashSet<E> newSet = (HashSet<E>) super.clone();
            newSet.map = (HashMap<E, Object>) map.clone();
            return newSet;
        } catch (CloneNotSupportedException e) {
            throw new InternalError();
        }
    } 

map名前が付けられるとしたら、(宣言を調べずに)何がm何であるかを簡単に理解できますか?mm

于 2013-08-31T14:31:34.580 に答える
1

アルゴリズムやクラスの残りの部分を見ないと必ずしも理解できないが、変数の宣言またはアルゴリズムの開始時にコメントされている可能性がある名前を使用することは許容されますか?

私は今Clean Codeを読んでおり、この本(私の意見では良いリファレンスです)によると、コメントされたコードは悪いコードです。コメントは必要な場合にのみ使用してください。良いコードはそれ自体にコメントするので、変数の長い名前がアルゴリズムで何を達成したいのかを説明している場合は、それらを使用してください。

于 2013-08-31T14:34:30.997 に答える
1

名前は、その範囲と同じくらい長くても短くてもかまいません - Uncle Bob を自由に、記憶から引用します。したがって、ループ内では短くし、クラス スコープの変数では詳細にします。特に API では、名前は直感的であり、さらに他の部分と一貫性がある必要があります。

大きなスコープ変数に意味をコメントしたり、省略したりしないでください。これにより、読者は安定した翻訳作業を行うことになります。

于 2013-08-31T14:36:55.743 に答える