Dire, ne pas poser de principe ici est souvent collé à moi lorsque j'utilise les méthodes de lecture ou d'organismes de réglementation, et les gens me disent de ne pas les utiliser. Le site explique clairement ce que je dois et ce que je ne devrais pas faire, mais il n'a pas vraiment expliquer POURQUOI je devrais dire, au lieu de demander. - Je trouver de l'aide getters et setters beaucoup plus efficace, et je peux faire plus avec eux.
Imaginez une classe Warrior
avec des attributs health
et armor
:
class Warrior {
unsigned int m_health;
unsigned int m_armor;
};
Maintenant, quelqu'un attaque mon guerrier avec une attaque spéciale qui réduit son armure pendant 5 secondes. À l'aide de setter, il serait comme ceci:
void Attacker::attack(Warrior *target)
{
target->setHealth(target->getHealth() - m_damage);
target->setArmor(target->getArmor() - 20);
// wait 5 seconds
target->setArmor(target->getArmor() + 20);
}
Et à dire, de ne pas poser de principe, il devrait ressembler à ceci (corrigez-moi si je me trompe):
void Attacker::attack(Warrior *target)
{
target->hurt(m_damage);
target->reduceArmor(20);
// wait 5 seconds
target->increaseArmor(20);
}
Maintenant, la deuxième on a clairement l'air mieux, mais je ne peux pas trouver les véritables avantages de cette.
Vous avez encore besoin de la même quantité de méthodes (increase
/decrease
vs set
/get
) et vous perdez l'avantage de vous demander si vous avez besoin de demander.
Par exemple, comment vous définissez les guerriers de la santé à 100?
Comment pouvez-vous comprendre si vous devez utiliser heal
ou hurt
, et combien santé, vous avez besoin de guérir ou blesser?
Aussi, je vois les setters et getters utilisé par certains des meilleurs programmeurs dans le monde. La plupart des Api de l'utiliser, et il est utilisé dans la prévention des mst lib tout le temps:
for (i = 0; i < vector.size(); i++) {
my_func(i);
}
// vs.
vector.execForElements(my_func);
Et si je dois décider de croire que des personnes ici reliant moi un article révélateur, ne se posant pas, ou de croire que 90% des grandes entreprises (apple, microsoft, android, la plupart des jeux, etc. etc.) qui ont réussi à faire beaucoup d'argent et de programmes de travail, c'est un peu dur pour moi de comprendre pourquoi serait - dire, ne demandez pas à être un bon principe.
Pourquoi devrais-je l'utiliser (devrais-je?) quand tout semble plus facile avec les getters et les setters?