Я часто принимаю решения о рендеринге шаблонов, оценивая переменные так, чтобы появился этот шаблон:
//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
}
Все ли это действительно эквивалентны? Было ли доказано, что один из них (или какой-то другой, по которому я скучаю) имеет наилучшее соотношение удобочитаемости и эффективности? или это будет считаться тратой времени на микрооптимизацию?