Вариации двух условий

Статус
В этой теме нельзя размещать новые ответы.
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
Всем доброго времени суток.

Возник такой вопрос, как лучше обрабатывать четыре вариации двух условий?

Так:
Код:
if(условие 1 верно && условие 2 верно)
{
// some code..
// some identical code ONE..
}
else if(условие 1 НЕ верно && условие 2 верно)
{
// some code..
// some identical code ONE..
}
else if(условие 1 верно && условие 2 НЕ верно)
{
// some code..
// some identical code TWO..
}
else if(условие 1 НЕ верно && условие 2 НЕ верно)
{
// some code..
// some identical code TWO..
}
Или так:
Код:
if(условие 1 верно)
{
    if(условие 2 верно)
    {
        //some code..
    }
    else if(условие 2 НЕ верно)
    {
        //some code..
    }
    //some identical code ONE..
}
else if(условие 1 НЕ верно)
{
    if(условие 2 верно)
    {
        //some code..
    }
    else if(условие 2 НЕ верно)
    {
        //some code..
    }
    //some identical code TWO..
}
 
Сообщения
169
Реакции
462
Помог
2 раз(а)
Лучше всего будет избегать такого рода код. Как один из вариантов - сделать флаги (bitsFlags |= myFlag) и далее чекать битсумму через switch.
//some identical code - в отдельную функцию.
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
the_hunter, я сомневаюсь, что в моем случае можно реализовать это флагами, по крайней мере не вижу способа. Поскольку во-первых, все эти 4 условия предопределяются в теле этой же функции, в которой будет условие, а во-вторых, если условие 2 у меня является булевым, то первое условие определяется значениями числа, и без дополнительного условия не получится задать флаг. Здесь пример определения этого условия. (строка 153). Я готовлю обновление, в котором к нему добавится еще и второе условие..
 

Garey

ninjaCow
Сообщения
440
Реакции
1,092
Помог
11 раз(а)
зачем во втором примере else if ? если условия одинаковые можно просто if else.
 

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
чекать битсумму через switch
Как?
Особенность switch в том что кейсы должны быть константами.
Для проверки битсуммы надо будет отдельно создавать константы всех возможных значений битсуммы.

И разве компилятор не смотрит на switch как на тот же if/else if?
Оба (if и switch) на выходе будут опкодами JNZ, JZER и т.д.

Nordic Warrior,
Код:
if(условие 1 верно)
{
    if(условие 2 верно)
    {
        //some code..
    }
    else
    {
        //some code..
    }
    //some identical code ONE..
}
else // условие 1 НЕ верно
{
    if(условие 2 верно)
    {
        //some code..
    }
    else
    {
        //some code..
    }
    //some identical code TWO..
}
Преимущество if-a в том, что он может сравнивать НЕ константы.
Код:
if( OnlinePlayers > get_pcvar_num(RequiredPlayers) )
  // code
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)

Ayk

Сообщения
763
Реакции
478
Помог
19 раз(а)
Nordic Warrior, у тебя там проверка abs > cvar_diff. Это значит, что sign никогда не вернет 0, так что там всего 2 варианта.
 
Сообщения
3,593
Реакции
1,576
Помог
141 раз(а)
Ayk, точно, я об этом не подумал.

Всем спасибо, кто откликнулся, можно закрывать. Сделал по совету Ayk.
 
Статус
В этой теме нельзя размещать новые ответы.

Пользователи, просматривающие эту тему

Сейчас на форуме нет ни одного пользователя.
Сверху Снизу