У меня есть следующий код:Есть ли лучший читаемый способ написать эту цепочку операторов if?
Creature::cancelWalk()
{
Player* player = getPlayer();
if (!player) {
if (getMonster() && getMonster()->getMaster() && getMonster()->getMaster()->getPlayer()) {
player = getMonster()->getMaster()->getPlayer();
}
}
if (player) {
player->sendCancelMessage(ret);
player->sendCancelWalk();
}
}
После краткого анализа, можно легко понять, я хочу, чтобы достичь чего-то простое:
Если creature
является сам player
, то sendCancelMessage
и sendCancelWalk
. Иначе, если creature
- это monster
, у которого также есть мастер, который является player
, отправьте тот же материал клиенту.
Есть ли лучший способ, чтобы написать этот код без добавления других методов на Monster
, Creature
и Player
классов?
Monster
и Player
оба являются "братьями и сестрами", полученными от Creature
.
Предполагая, что последовательные вызовы 'getMonster() -> getMaster() -> getPlayer() 'не может возвращать разные значения, вам не нужно проверять его значение в операторе' if'. –
Похож на вопрос для http://codereview.stackexchange.com. – DanielKO