我开始使用这套条件:
if (old.tg.all && old.hg.all) {
// reject
}
if (new.tg.all && new.hg.all) {
// reject
}
if (old.hg.all && new.tg.all) {
// reject
}
if (old.tg.all && new.hg.all) {
// reject
}
if (old.tg == new.tg) {
if ( (old.hg == new.hg) || (old.hg.all) || (new.hg.all) ) {
// reject
}
}
if (old.hg == new.hg) {
if ( (old.tg == new.tg) || (old.tg.all) || (new.tg.all) ) {
// reject
}
}
我设法将其减少为:
if (old.tg.all || new.tg.all) && (old.hg.all || new.hg.all) {
// reject
}
if (old.tg == new.tg) {
if ( (old.hg == new.hg) || (old.hg.all) || (new.hg.all) ) {
// reject
}
}
if (old.hg == new.hg) {
if ( (old.tg == new.tg) || (old.tg.all) || (new.tg.all) ) {
// reject
}
}
可以进一步减少逻辑运算的数量和/或布尔条件的重复次数吗?
答案 0 :(得分:1)
首先,“表达式简化”不是一个定义明确的操作。
其次, a (或多或少)对简化逻辑表达式的标准理解是Disjunctive normal form(或者,它的兄弟Conjunctive normal form)。两者都可能比原始表达式和简化表达式更简单。
至少,他们最小化表达式的深度。
主要问题是不简单,但清晰意图与可维护性。您不应该担心您编写的字符数或代码行数,而应该关注理解和修改代码逻辑的难度。只要代码清楚,一点冗余和/或额外(便宜)检查就不会受到伤害。