CodeSOD : Les marchands de bie... Note

CodeSOD : Les marchands de biens immobiliers

Kleyguerth a rencontré un bug déroutant où un indicateur _hasPicked s'est activé de manière inattendue. Ce problème provenait d'un commit récent et massif avec un commentaire vague. Le problème principal résidait dans la façon dont TypeScript gère les propriétés qui peuvent également être des fonctions avec des getters et des setters. Initialement, checkAndPick était un getter privé qui retournait simplement la valeur de _hasPicked. Plus tard, il a été modifié pour devenir return this._hasPicked || (this._hasPicked = true);. Cette version a muté _hasPicked en true s'il était false et retournait toujours true. Bien que cela ait été considéré comme une mauvaise pratique en raison de la mutation d'état dans un getter, cela fonctionnait comme prévu. La situation s'est aggravée lorsque le code a été modifié pour devenir return this._hasPicked || !(this._hasPicked = true);. Cette version a défini _hasPicked sur true mais a retourné false, causant des problèmes généralisés. Le défaut fondamental réside dans l'utilisation d'accesseurs de propriétés pour la mutation d'état, qui devraient être réservés aux setters. Une logique complexe, voire simple, ne devrait pas résider dans les accesseurs de propriétés.