Каков наилучший тип анализа для рефакторинга, казалось бы, эквивалентных групп оценок? - PullRequest
0 голосов
/ 29 октября 2019

Я часто принимаю решения о рендеринге шаблонов, оценивая переменные так, чтобы появился этот шаблон:

//Assume A and B are different processes that take different amounts of time to compute.
if (A){
    if (B){
        // A && B
    } else {
        // A && !B
    }
} else {
    if (B){
        // !A && B
    } else {
        // !A && !B
    }
}

Я сразу замечаю, что есть (на первый взгляд) тривиальный способ изменить этот шаблон и получить почти такой же результат:

if (B){
    if (A){
        // B && A
    } else {
        // B && !A
    }
} else {
    if (A){
        // !B && A
    } else {
        // !B && !A
    }
}

Если я уверен, что количество переменных никогда не увеличится, я предполагаю более основанный на таблице истинности подход, такой как:

if (A && B) {
    // A && B
} else if (A && !B) {
    // A && B
} else if (!A && B) {
    // A && B
} else if (!A && !B) {
    // !A && !B
}

Все ли это действительно эквивалентны? Было ли доказано, что один из них (или какой-то другой, по которому я скучаю) имеет наилучшее соотношение удобочитаемости и эффективности? или это будет считаться тратой времени на микрооптимизацию?

...