Kleyguerth는 _hasPicked 플래그가 예상치 못하게 켜지는 당혹스러운 버그를 발견했습니다. 이 문제는 모호한 주석이 달린 최근의 대규모 커밋에서 비롯되었습니다. 핵심 문제는 TypeScript가 getter와 setter를 가진 함수이기도 한 속성을 처리하는 방식에 있었습니다. 처음에는 checkAndPick이 단순히 _hasPicked의 값을 반환하는 private getter였습니다. 나중에 return this._hasPicked || (this._hasPicked = true);로 수정되었습니다. 이 버전은 _hasPicked가 false이면 true로 변경하고 항상 true를 반환했습니다. getter에서 상태를 변경하는 것은 좋지 않은 관행으로 간주되었지만, 예상대로 작동했습니다. 코드가 return this._hasPicked || !(this._hasPicked = true);로 더 변경되면서 상황이 악화되었습니다. 이 버전은 _hasPicked를 true로 설정했지만 false를 반환하여 광범위한 문제를 일으켰습니다. 근본적인 결함은 상태 변경을 위해 속성 접근자를 사용하는 데 있으며, 이는 setter에만 사용되어야 합니다. 복잡하거나 간단한 로직이라도 속성 접근자 내부에 있어서는 안 됩니다.
_hasPicked플래그가 예상치 못하게 켜지는 당혹스러운 버그를 발견했습니다. 이 문제는 모호한 주석이 달린 최근의 대규모 커밋에서 비롯되었습니다. 핵심 문제는 TypeScript가 getter와 setter를 가진 함수이기도 한 속성을 처리하는 방식에 있었습니다. 처음에는checkAndPick이 단순히_hasPicked의 값을 반환하는 private getter였습니다. 나중에return this._hasPicked || (this._hasPicked = true);로 수정되었습니다. 이 버전은_hasPicked가 false이면 true로 변경하고 항상 true를 반환했습니다. getter에서 상태를 변경하는 것은 좋지 않은 관행으로 간주되었지만, 예상대로 작동했습니다. 코드가return this._hasPicked || !(this._hasPicked = true);로 더 변경되면서 상황이 악화되었습니다. 이 버전은_hasPicked를 true로 설정했지만 false를 반환하여 광범위한 문제를 일으켰습니다. 근본적인 결함은 상태 변경을 위해 속성 접근자를 사용하는 데 있으며, 이는 setter에만 사용되어야 합니다. 복잡하거나 간단한 로직이라도 속성 접근자 내부에 있어서는 안 됩니다.