Ah oui, beaucoup plus simple ! Bravo !
Si je comprend bien, on peut résumer en 4 macro-étapes:
- factoriser les lectures dans un getter et les modifications dans une méthode de mutation
- intercepter le résultat du calcul dans un nouveau champ public de la classe cible (pas besoin de fonction pure, tant que le calcul n'a pas d'effet de bord) -> on a alors une copie à jour de la valeur dans la classe cible
- changer le getter pour retourner le nouveau champ -> on n'a plus besoin du tableau original, on peut nettoyer toutes ces références
- bouger le getter, puis la mutation dans la classe cible
Perso, mais c'est très marginal :
- je ferais l'extract method du coins() tout de suite après celui du addCoin() et le remplacement du ++. Cela permet de bien centraliser toutes les références au tableau dès le départ, d'avoir tout sous les yeux et de pouvoir "oublier" le reste du code.
- au lieu d'extraire la méthode incrementCoin, J'écrirais plutôt directement le nouveau champ en plein milieu
purses[currentPlayer] = currentPlayer().coins = coins() + 1;
La double affectation n'est pas extra dans l'idéal, mais ça matérialise bien le côté "interception". On est pas tellement dans du parallel change à mon avis. Et plus besoin de reinliner ensuite.