6

this必須かどうかにかかわらず、クラスの自己参照を一貫して使用してきました。それを読んだ人は、変数がどのスコープに属しているかを自分で把握する必要がないため、コードの読みやすさに役立つと思います。

静的スコープでも同様に作業したいと思います。静的コンテキストへのすべての参照の前にstaticキーワードを付けて、コードをもう少し自明なものにします。

しかし、Java はそれを好まない。技術的には単にクラス名を使用できることはわかっていますが、特にクラスの名前が長い場合、これはかなり醜く見えます。静的メソッドと属性の名前の前に特別な接頭辞を付けることもできますが、偏執狂と見なされたくありません。

皆さんは、これを良い OOP スタイルだと思いますか? それとも、上記のことを完全に忘れて、すべてのスコープバインディングをjavacに任せるべきですか?

4

5 に答える 5

3

ほとんどのJavaプログラマーthisは、解決すべきあいまいさが存在する場合にのみキーワードが表示されることを期待しています。あなたが提案するようにそれを自由に適用すると、他の人を不必要に疑わせる可能性があります。静力学については、それがあなたのバッグであれば、ハンガリー風の表記法を使用できると思いますが、コードをレビューするときにそれらを見つけることもそれほど難しくありません(それがひどくモノリシックか何かでない限り)。

于 2013-02-10T01:25:50.213 に答える
3

仕事でこれを試さないでください:

public class Foo
{
    private static class This extends Foo{}

    static int x;
    static void f(int x){}

    void test()
    {
        This.f(This.x);
    }
}
于 2013-02-10T01:26:03.907 に答える
3

メンバー フィールド (またはメソッド) のすべての使用の前に を付ける規則がいくつかありますthis。変数名やクラス名の前に付ける規則もあります (悪名高いハンガリー語表記)。たとえば、公式の Android コード スタイル ガイドラインでは、プライベート メンバー フィールド名にプレフィックスm-( などprivate int mSize) を付け、プライベート スタティックに を付ける必要がありs-ます。

個人的には、これらの慣習はどちらも嫌いです。すでに非常に冗長な Java コードを乱雑にするだけだからです。最新の IDE は、視覚的な差別化の手段を提供します。たとえば、Eclipse では、ローカル変数は標準の黒のフォントで表示され、フィールドは青で表示されます。静的メソッドまたはフィールドは斜体で示しています。

また、ソース コードをナビゲートする優れた方法も提供します。変数/メソッド/型の名前を Ctrl キーを押しながらクリックすると、その宣言が表示されます。アウトライン ビューがあります。Eclipse は、マウスをその上に置くだけで、そのようなことに関する情報を含むツールチップを表示します。

はい、IDE でコードを読むのではなく、単純なテキスト エディターでコードを読むことがあるという議論を誰かがするかもしれません。私もときどきコードをざっと見るためにそうしますが、正直なところ、真面目なコーディングをしたいときはいつでも、IDE を使用しないのはただのマゾヒズムです。

于 2013-02-10T01:41:58.657 に答える
2

ほとんどの IDE は、参照されている変数のソースを非常に迅速に見つけることができます。したがって、今日では、スコープなどに関するヒントを追加することは単に気を散らすだけであると考えられています.

要するに、不必要に使用しないでください。また、明らかに、適切な名前を選択し、適切なコードを記述し、適切なコメントを追加することをthis除いて、あなたの後に来るプログラマーの手を握るためのすべての努力を放棄してください。

于 2013-02-10T01:13:17.200 に答える
1

単純な命名スキームを使用して、すべての静的メソッドを静的内部クラスに配置できます。例えば:

public class Myclass {

    public void instanceMethod() {
        Static.doThing();
    }


    public static class Static {
        public static void doThing() {
            //blah
        }
    }
}
于 2013-02-10T01:20:31.273 に答える