Сжатие кода: одно и то же действие для любого элемента пары - PullRequest
1 голос
/ 20 января 2012

Есть ли способ сделать код более компактным для этой ситуации?

// pseudocode
if (A == 1) {
    if (B == 2) {
        action1;
    }
    if (B == 3) {
        action2;
    }
}

if (B == 1) {
    if (A == 2) {
        action1;
    }
    if (A == 3) {
        action2;
    }
}

в Objective-C / Objective-C ++?

Еще один пример:

if (((int)fixtureUserDataA == FIXTURE_FOOT_SENSOR || ((int)fixtureUserDataB == FIXTURE_FOOT_SENSOR ))) {

    // Hero foot sensors
    if (bodyA->GetUserData() != NULL) {
        CCSprite * sprite = (CCSprite*)bodyA->GetUserData();
        if (sprite.tag == TAG_HERO) {
            [Hero sharedInstance].numFootContacts++;             
        }
    }

    if (bodyB->GetUserData() != NULL) {
        CCSprite * sprite = (CCSprite*)bodyB->GetUserData();
        if (sprite.tag == TAG_HERO) {
            [Hero sharedInstance].numFootContacts++;             
        }
    }
}

Можно ли использовать только одну, если или более четкую конструкцию?

Ответы [ 2 ]

3 голосов
/ 20 января 2012

для 2-го примера:

checkBody(bodyA);
checkBody(bodyB);

void checkBody(Body* body)
{
    CCSprite * sprite = (CCSprite*)body->GetUserData();
        if (sprite.tag == TAG_HERO) {
            [Hero sharedInstance].numFootContacts++;             
        }
}
0 голосов
/ 20 января 2012
if (A == 1 || B == 1)
    if (A + B == 3)
        action1;
    else if (A + B == 4)
        action2;
...