2012-02-07 4 views
1

OOP에서 많은 대형 프로젝트를 읽었습니다. 많은 프로젝트가 this.[variable], [ClassName].[staticVariable]을 사용합니다. 예를 들어 로컬 변수가 선언되지 있기 때문에, 불필요하지만 Getters & Setters 기능을 자동으로 생성 "this"를 사용하는 이점

public class ABC { 

    private float mX; 
    public static float y;  

    public float getX() { 
     return this.mX; 
    } 

    public float doSomethingWithY() { 
     return ABC.y; 
    } 

} 

심지어 이클립스

, 또한, this.[variable]와 함께 제공됩니다.

이러한 표기법을 사용할 때 이점이 있습니까 아니면 단순한 코드 스타일입니까?

편집 일부 사용자는 오해하지 않습니다. 나는 this[ClassName].[staticVariable]의 약자를 안다. 그러나이 경우에는 불필요합니다. 문제는 : 불필요한 경우에도 전문가 코더는 왜 그것을 추가합니까? 거대한 프로젝트를 업데이트/수정해야 할 때 어떤 장점과 단점이 있습니까?

+0

그 .Like 코딩 스타일 ... stylecop에서 사용을하는 클래스의 인스턴스 변수에 액세스하려는 경우 기본적으로 resharper에서 사용하지 않습니다. – Tanmoy

답변

2

동일한 환경의 로컬 메소드 매개 변수가 아닌 멤버 변수를 사용해야하는 경우가 있습니다 (예 : this.).

정적 변수를 가져 오려는 클래스를 지정해야하는 정적 변수 (많은 클래스가 같은 이름의 정적 변수를 정의 할 수 있음)도 필요합니다.

필요한 경우를 제외하고는 실제로 코딩 스타일의 문제입니다. 잠재적 인 모호성을 해결하는 데 도움이 될 때마다 을 사용하는 것이 좋습니다. 코드의 작은 조각은 중요하지 않습니다하지만 때로는 이런 일이 수에 대한

+0

단점이 있습니까? 나는 결코 모호함으로 인해 문제가 발생하지 않기 때문에 이런 식으로 사용할 때도 안전하다고 느낍니다. –

+0

약간의 추가 타이핑을 제외하고는 실질적인 단점이 없습니다. 야생으로 가라. – mikera

1

복잡한 메서드에서는이 클래스의 인스턴스 변수와 특정 함수의 로컬 변수를 구별하는 것이 좋습니다. 이 구별은 "this"를 사용할 때 즉시 명백합니다.

0

:이 경우

 
public float getX() { 
    .... 
    int mX = someFunc() 
    ... 
    return mX; 
} 

는 로컬 값 대신 멤버 변수로 반환됩니다.

일반적으로 명시 적이어야하고 this.mX이라고 말하고 싶습니다. 그러나 어쨌든 거대한 기능을 가지고 있어서는 안됩니다.

0
this.? '?' is a member variable, this is a reference to the current object. 

당신은 당신이하지 않는 방법 내부에 생성 된 변수, 클래스 속성으로 작동하고 있는지 알고 아니면 매개 변수로받은이와 기본적으로

3

this를 참조하십시오.

또한 동일한 이름의 로컬 변수가있는 경우 유용합니다.

그리고 마지막 이유 : 가독성.

0

구문, 당신은 (개체의 참조)를 사용합니다. (예 : 변수 이름)

A a= new A();// for non static class,this for the current object 
a.(instance variable name) 
// for non static class do the same but use (class name).variable name 
관련 문제