2010-05-23 2 views
4

:암시 적 대 AS3의 명시 적 getters/setters, 사용하는 이유 및 이유는 무엇입니까? 내가 같이 일하고있다 AS3의 출현 이후

private var loggy:String; 

public function getLoggy():String 
{ 
    return loggy; 
} 

public function setLoggy (loggy:String):void 
{ 
    // checking to make sure loggy's new value is kosher etc... 
    this.loggy = loggy; 
} 

과이 같은 작업을 피할 : 일부 있도록

private var _loggy:String; 

public function get loggy():String 
{ 
    return _loggy; 
} 

public function set loggy (loggy:String):void 
{ 
    // checking to make sure loggy's new value is kosher etc... 
    _loggy = loggy; 
} 

내가 AS3의 암시 게터를 사용하여 피할 수/세터 난 그냥 수 "get .."을 입력하기 시작하면 콘텐츠 보조 기능이 모든 제 게터 목록과 제 설정자를위한 목록을 제공합니다. 나는 내 코드에서 밑줄을 쓴다는 사실에 싫어서 암묵적인 경로를 벗어났다. 이것에

whateverObject.setLoggy("loggy's awesome new value!"); 

:

또 다른 이유

내가이의 느낌을 선호한다는 것입니다

whateverObject.loggy = "loggy's awesome new value!"; 

내가 더 잘 전자는 실제로 코드에서 일어나는 상황을 반영 느낀다. 값을 직접 설정하지 않고 함수를 호출하려고합니다.

플래시 빌더와 위대한 새 플러그인 SourceMate (FDT가 FB로 유명한 유용한 기능을 얻는 데 도움이 됨)을 설치 한 후 SourceMate의 "getters and setters 생성"기능을 사용하면 코드가 자동으로 설정된다는 것을 깨달았습니다. 최대 암시 적 경로를 사용하여 :

private var _loggy:String; 

public function get loggy():String 
{ 
    return _loggy; 
} 

public function set loggy (loggy:String):void 
{ 
    // do whatever is needed to check to make sure loggy is an acceptable value 
    _loggy = loggy; 
} 

나는이 SourceMate 사람들이 그래서 지금은 내 방식에 의문을 제기하고, 그들이 무엇을하거나 AS3에서 코딩을 위해 워크 플로우 향상 플러그인을 작성되지 않을 것을 알고 있어야 그 수치.

제 질문은 누군가가 제 명시적인 g/s 방법을 포기하고 암시 적 기술을 사용하며 개인 vars에 악취가 나는 작은 _underscores를 수용해야하는 이유를 제공 할 수 있습니까? 또는 내가하는 방식대로 일하는 것에 대한 나의 이유에서 나를 되돌려 놓을 수 있습니까?

답변

19

솔직히 말해서 이것은 들여 쓰기 또는 중괄호 스타일과 비슷하다고 생각합니다. 작업하는 코드베이스와 스타일을 일치시키는 중요성/유용성은 어느 쪽의 접근 방식보다 "내재적 인"이점을 능가합니다. 그렇다고해서 물리 엔진에서 어느 부분을 유지 관리하겠습니까?게터/세터에

// with getters 
body.position.y += body.velocity.y * dt; 

// without 
body.getPosition().setY(body.getPosition().getY() + body.getVelocity.getY() * dt); 

또 다른 장점은 항상 처음에 속성 간단한 공용 변수를 만들고, 외부 코드를 변경하지 않고, 나중에 필요한 경우 게터/세터로 리팩토링 할 수 있다는 것입니다. 모든 변수에 대한 접근자를 선제 적으로 작성할 필요는 없습니다. 당신이 필요하다고 결정할 때까지 기다릴 수 있습니다.

+0

그래, 나는 너의 요점을 완전히 본다. 시간을내어 주셔서 감사합니다! – James

2

나는 내 머리 꼭대기에서 몇 가지 이유를 생각할 수 있습니다.

  1. 암시 적 get/set은 데이터 바인딩 기능을 더 좋게/더 쉽게 제공합니다. 이벤트를 연결하고 "Flex 모델"의 적합성을 훨씬 더 좋게 만드는 것이 더 쉽습니다.
  2. 생성 된 ASDoc을 훨씬 간결하게 만듭니다.
  3. 디자인보기에서 작업 할 때 사용자 지정 구성 요소의 속성 관리자에서 속성을 가져 오는 유일한 방법이라고 생각합니다.

여러분이하는 일이 곧바로 get/set 일 경우 public var를 노출하고 getter/setter를 보유 var (_variable)로 우회하면 전체적으로 많이 손실되지 않습니다. 나중에 클래스 외부 인터페이스를 변경하지 않고 암시 적 get/set으로 변경할 수 있습니다.

+0

대단히 감사합니다. – James

0

리팩토링 및 코드 가독성을 강화하기 때문에 암시 적 getter를 사용하지 않습니다. 할당이 public 필드 또는 접근 자 메서드 인 경우 일반적으로 쉽게 찾아 볼 수 없습니다. 그래서 버그를 추적하고 싶다면 더러운 사냥에 빠질 수도 있습니다.

관련 문제