The Daily WTF 日本語 フォロー CodeSOD:プロパティフリッパー Kleyguerth は、_hasPicked フラグが予期せずオンになるという、不可解なバグに遭遇しました。この問題は、曖昧なコメントが付いた最近の大規模なコミットに起因していました。根本的な問題は、TypeScript がゲッターとセッターを持つ関数でもあるプロパティをどのように扱うかに関係していました。当初、checkAndPick は単に _hasPicked の値を返すプライベートゲッターでした。その後、return this._hasPicked || (this._hasPicked = true); に変更されました。このバージョンは、_hasPicked が false の場合は true に変更し、常に true を返しました。これはゲッターでの状態変更のため悪い習慣と見なされましたが、期待通りに機能しました。コードがさらに return this._hasPicked || !(this._hasPicked = true); に変更されると、状況は悪化しました。このバージョンは _hasPicked を true に設定しましたが false を返し、広範囲にわたる問題を引き起こしました。根本的な欠陥は、状態変更のためにプロパティアクセサーを使用することにあり、これはセッターのために予約されるべきです。複雑な、あるいは単純なロジックであっても、プロパティアクセサー内に配置されるべきではありません。 CodeSOD: Property Flippers thedailywtf.com The Daily WTF 日本語 RSS thenote.app
_hasPickedフラグが予期せずオンになるという、不可解なバグに遭遇しました。この問題は、曖昧なコメントが付いた最近の大規模なコミットに起因していました。根本的な問題は、TypeScript がゲッターとセッターを持つ関数でもあるプロパティをどのように扱うかに関係していました。当初、checkAndPickは単に_hasPickedの値を返すプライベートゲッターでした。その後、return this._hasPicked || (this._hasPicked = true);に変更されました。このバージョンは、_hasPickedが false の場合は true に変更し、常に true を返しました。これはゲッターでの状態変更のため悪い習慣と見なされましたが、期待通りに機能しました。コードがさらにreturn this._hasPicked || !(this._hasPicked = true);に変更されると、状況は悪化しました。このバージョンは_hasPickedを true に設定しましたが false を返し、広範囲にわたる問題を引き起こしました。根本的な欠陥は、状態変更のためにプロパティアクセサーを使用することにあり、これはセッターのために予約されるべきです。複雑な、あるいは単純なロジックであっても、プロパティアクセサー内に配置されるべきではありません。