문제

나는 읽었다 이 답변 그리고 그 의견이 궁금합니다.사용하지 않는 이유가 있나요? this / Self / Me ?

지금:이전에 이런 질문이 있었다면 죄송합니다. 단어 검색이 불가능한 것 같습니다. this 그래서.

도움이 되었습니까?

해결책

경고 : 아래의 순전히 주관적인 답변.

이/self/me를 사용하지 않는 최선의 "이유"는 간결하다고 생각합니다. 이미 멤버 변수/함수 인 경우 왜 접두사를 중복시키기 위해 추가해야합니까?

개인적으로 나는 컴파일러에 대한 특정 표현을 명확하게 표현할 필요가 없다면이/self/me의 사용을 피합니다. 많은 사람들이 이것에 동의하지 않지만 나는 내가 일했던 모든 그룹에서 진짜 고집 지점이 없었습니다.

다른 팁

나는 대부분의 일반적인 시나리오가 이미 인용 된 두 개의 게시물에서 다루어 졌다고 생각합니다. 주로 간결함과 중복성 대 명확성 - 사소한 추가 : C#에서는 현재 유형의 "확장 방법"에 액세스하려면 "this"를 사용해야합니다.

this.Foo();

어디 Foo() 외부로 선언됩니다.

public static void Foo(this SomeType obj) {...}

C#의이 예와 같이 일부 경우를 명확히합니다.

public class SomeClass
{
    private string stringvar = "";

    public SomeClass(string stringvar)
    {
        this.stringvar = stringvar;
    }
}

모든 규칙과 함께 Stylecop을 사용하면 this. IN. 사용을 시작한 이후로 내 코드가 더 읽을 수 있지만 개인 선호도입니다.

나는 이것이 문제가 아닌 코드에 더 많은 가독성을 추가하기 때문에 문제가되지 않는다고 생각합니다.

PHP와 같은 일부 언어의 경우 클래스 필드 나 메소드를 사용해야하는 경우 $ this->로 접두사를해야합니다.

PHP가 클래스 멤버없이 클래스 멤버를 참조 할 수있는 방법이 있다면 일부 라인이 불필요하게 더 길게 만든다는 사실이 마음에 들지 않습니다.

나는 개인적으로 그렇게 생각한다. this.whatever 가독성이 떨어집니다.2라인 방법의 차이점을 눈치채지 못할 수도 있지만, 다음 내용을 얻을 때까지 기다리십시오. this.variable 그리고 this.othervariable 수업의 모든 곳에서.

게다가, 내 생각에 this. 많이 싫어하는 헝가리 표기법의 일부를 대체하는 것으로 발견되었습니다.어떤 사람들은 변수가 클래스 멤버라는 것을 독자가 더 명확하게 알 수 있다는 것을 알았습니다. this. 트릭을했습니다.그런데 왜 우리 자신을 속이고 평범하고 오래된 것을 사용하지 않는가? "m_" 아니면 단순히 "_" 이를 위해 추가 명확성이 필요하다면?5자 vs.2(또는 1).타이핑 횟수가 줄어들고 결과는 동일합니다.

하지만 스타일 선택은 여전히 ​​개인 취향의 문제입니다.코드를 변경하는 데 유용한 특정 방식으로 코드를 읽었던 사람을 설득하는 것은 어렵습니다.

글쎄, Eclipse는 다른 색상의 컬러 필드, 인수 및 로컬 변수를 수행하므로 적어도 일식 환경에서 작업 할 필요는 없으며,이를 통해 자신과 세대가 앞으로도 "필드"로 표시하기 위해서는 분야를 구문을 구별 할 필요가 없습니다.

실제로 "Java의 변수"컨텍스트에서 이전에 질문을 받았습니다.

Java에서 'this'로 인스턴스 변수를 접두사합니까?

주요 재발 원인은 다음과 같습니다.

"코드의 의미를 찾기 위해 선별 해야하는 시각적 노이즈를 증가시킵니다."

다시 말해서, 다른 말로 ... 내가 사지 않는 것은 this. 매우 유용한.

그것은 나에게 넌센스처럼 들린다. 'this'를 사용하면 코드를 더 좋게 만들 수 있으며 문제에 아무런 문제가 없습니다. 그런 정책은 어리석은 일입니다 (적어도 사람들에게 왜 그들이 제자리에 있는지 말하지 않을 때).

'이것.' 코드에서 코더는 항상 코더가 지능 (또는 다른 IDE 등가물)을 사용하여 무거운 리프팅을 수행했다고 제안합니다.

나는 확실히 이것에 대해 유죄이며, 순전히 허영상의 이유로 나중에 제거합니다.

내가 사용하는 유일한 이유는 모호한 변수 (불량 관행) 자격을 갖추거나 확장 방법을 구축하는 것입니다.

변수 자격

string name; //should use something like _name or m_name

public void SetName(string name)
{
     this.name = name;
}

내가 사용합니다 this 인스턴스화 된 객체의 메소드를 호출합니다 self 정적 방법입니다

vb.net에서 내가 사용하는 일반적인 관행 중 하나는 다음 코드입니다.

Class Test
    Private IntVar AS Integer
    Public Function New(intVar As Integer)
       Me.Intvar = intvar
    End Function    
End Class

항상 그렇지는 않지만 대부분 나 /이 / 자아는 매우 유용합니다. 당신이 말하는 범위를 명확히합니다.

일반적인 세터 방법 (LagerDalek의 답변에서 가져온)에서 :

string name;

public void SetName(string name)
{
     this.name = name;
}

사용하지 않으면 컴파일러는 회원 변수를 참조하고 있다는 것을 알지 못할 것입니다.
사용 this. 컴파일러에 메소드의 즉각적인 범위를 벗어난 멤버 변수에 액세스해야한다고 말하는 것입니다. 회원 변수와 동일한 이름 인 메소드 내에서 변수를 작성하는 것은 다른 클래스를 확장 한 클래스에서 메소드를 재정의하는 것과 같이 완벽하게 합법적입니다.
그러나 여전히 슈퍼 클래스의 메소드를 사용해야하는 경우 super. 내 의견으로는 이것을 사용합니다. Super를 사용하는 것보다 나쁘지 않습니다. 프로그래머가 코드에서 더 많은 유연성을 허용합니다.

내가 걱정하는 한, 가독성이 그것에 들어 가지 않는 한, 그것은 당신의 변수의 접근성에 관한 것입니다.

결국 그것은 항상 개인적인 선택의 문제입니다. 개인적으로 저는이 코딩 컨벤션을 사용합니다.

public class Foo
{
  public string Bar
  {
    get
    {
      return this.bar;
    }
    /*set
    {
      this.bar = value;
    }*/
  }
  private readonly string bar;

  public Foo(string bar)
  {
    this.bar = bar;
  }
}

그래서 저에게 "이것은"생성자를 읽을 수 있도록하기 위해 실제로 필요합니다.

편집 : 위의 코드를 작성하는 동안 똑같은 예제가 "sinje"에 의해 게시되었습니다.

나는 자주 "이것"을 자주 사용하지 않을뿐만 아니라. 나는 때때로 "그것"을 사용합니다.

class Foo
{
    private string bar;

    public int Compare(Foo that)
    {
        if(this.bar == that.bar)
        {
            ...

등등. 내 코드에서 "그"는 일반적으로 같은 클래스의 또 다른 인스턴스를 의미합니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top