私にゲッターやセッターを使用すると、原則としてhereが貼り付けられ、人は私にそれらを使わないように伝えます。 私は何をすべきか、何をすべきではないかをサイトが明確に説明していますが、尋ねるのではなく、私が伝えたいのは本当に説明していません。 getterとsetterを使う方がはるかに効率的です。getter/setter vs "tell、do not ask"を使う?
属性health
とarmor
でクラスWarrior
を想像してみて:
class Warrior {
unsigned int m_health;
unsigned int m_armor;
};
今、誰かが5秒のための彼の鎧を減らす特殊攻撃で私の戦士を攻撃します。
void Attacker::attack(Warrior *target)
{
target->setHealth(target->getHealth() - m_damage);
target->setArmor(target->getArmor() - 20);
// wait 5 seconds
target->setArmor(target->getArmor() + 20);
}
とで(私が間違っているなら、私を修正)、それは次のようになり原理を聞かないで、言う:
void Attacker::attack(Warrior *target)
{
target->hurt(m_damage);
target->reduceArmor(20);
// wait 5 seconds
target->increaseArmor(20);
}
今セッターのそれはこのようになりますを使用して2番目は明らかに良く見えますが、私はこれの本当の利点を見つけることができません。 同じ方法(increase
/decrease
対set
/get
)が必要です。依頼する必要があるかどうか尋ねるメリットがありません。 たとえば、戦士の健康状態を100に設定するにはどうすればよいですか? heal
またはhurt
のどちらを使用すべきか、どの程度の健康を傷つけたり傷つけたりする必要があるかを理解していますか?
また、私はセッターとゲッタが世界中の最高のプログラマによって使用されているのを見ています。 ほとんどのAPIは、それを使用し、それは、STD libにすべての時間を使用されています:
for (i = 0; i < vector.size(); i++) {
my_func(i);
}
// vs.
vector.execForElements(my_func);
を私は持っている場合かに、ではない、私は1つの記事に関する占いをリンクを求めてここの人々を信じるかどうかを決定します成功した多くのお金と作業プログラムを作った大企業(リンゴ、マイクロソフト、アンドロイド、ゲームのほとんどなど)の90%を信じていると私はちょっと理解できないのです。なぜかは、は良い原則であると尋ねる。
getterやsetterですべてが簡単に見えるようになったら、どうすればいいですか?
hp_reductionリストとarmor_reductionリストを使用すると、単一のhpまたはarmor_reductionリストを使用することができます。複数の敵が同じ犠牲者に当たったとき、複数のスレッドが健康と鎧のために同じ変数にアクセスするため、 。スレッドで5秒待っていませんか?どのようにして正確に5秒待つことができますか?タスクスケジューラも必要な場合があります。 –
@huseyintugrulbuyukisikありがとうございますが、ここで働くゲームをコーディングしようとはしていません。単純な例だった –
次に、最も単純な割り当て操作を行うことができます。戦士.HP- = 5; –