21

this/ self/meポインタを明示的に必須にする利点は何ですか?

OOP理論によると、メソッドは主に(のみ?)メンバー変数とメソッドの引数で動作するはずです。これに続いて、 (オブジェクトのビューの側から) 外部変数よりもメンバー変数を参照する方が簡単なはずです...明示的thisにすると、より冗長になり、外部変数よりもメンバー変数を参照するのが難しくなります。これは私には直感に反するようです。

4

6 に答える 6

22

メンバー変数とメソッド パラメーターに加えて、ローカル変数もあります。オブジェクトに関する最も重要なことの 1 つは、その内部状態です。明示的なメンバー変数の逆参照により、その状態を参照している場所とその状態を変更している場所が非常に明確になります。

たとえば、次のようなコードがあるとします。

someMethod(some, parameters) {
    ... a segment of code
    foo = 42;
    ... another segment of code
}

それをすばやくブラウジングするときは、前のセグメントで定義された変数のメンタルモデルを持って、それが単なる一時変数なのか、それともオブジェクトの状態を変更するのかを知る必要があります。一方、 this.foo = 42 は、オブジェクトの状態が変更されていることを明らかにします。また、明示的な逆参照が排他的に使用されている場合は、逆の場合に変数が一時的であることを確認できます。

より短く、適切に分解されたメソッドは、それほど重要ではありませんが、それでも、長期的な理解可能性は、コードを書く際の多少の利便性よりも優先されます。

于 2009-05-26T10:53:26.237 に答える
4

selfPython の意味での「明示的」について話している場合は、このトピックに関する興味深い議論があります。これは Bruce Eckelの記事に対するGuido の反応です。Bruce の記事へのコメントも啓発的です (いくつかはともかく)。

于 2009-05-26T10:44:08.270 に答える
3

メソッドの引数がメンバー変数と同じ名前の場合はどうなるでしょうか? this.x = x次に、たとえば使用できます。this.xはメンバー変数でx、メソッドの引数はどこにありますか。これはほんの一例です。

于 2009-05-26T10:35:40.207 に答える
3

現在のオブジェクトへのポインター/参照を他の場所に渡すか、代入演算子での自己代入から保護するために必要です。

于 2009-05-26T10:36:52.183 に答える
2

変数を明確に識別するのに役立つため、通常、代入演算子またはコピー コンストラクターを作成する場合にのみ (C++ で) これを使用します。関数パラメーター変数名がメンバー変数名と同じである場合、またはdelete thisを使用してオブジェクトを強制終了したい場合に、それを使用することを考えることができる他の場所です。

于 2009-05-26T10:37:05.490 に答える
1

たとえば、メンバー名がメソッドに渡されたものと同じ場所になります

public void SetScreenTemplate(long screenTemplateID, string screenTemplateName, bool isDefault)
        {
            this.screenTemplateID = screenTemplateID;
            this.screenTemplateName = screenTemplateName;
            this.isDefault = isDefault;
        }
于 2009-05-26T10:38:16.923 に答える