好的,假设您确实有很多if
语句,而且您的t
是固定整数,
并且主要目标是使您的许多“规则”易于阅读。那么您可以尝试以下方法。
首先,我会确保所有的t
都有有效值,并跳过未定义的情况。
如果变量t
是真正的逻辑值而不是数字,我也会仅使用显式规则(例如,t1 == 0
而不是使用>, <, >=, <=
),特别是如果您想要实现的规则像if
语句中表达的那样多样化。
然后,您可以使用数字系统对逻辑进行编码,例如使用十进制以获得良好的可读性。
对于每个t
,您可以使用新的“逻辑数字”中的一个小数位来编码您的逻辑:
111 means t1 == t2 == t1 == 1
201 means t1 == 2, t2 == 0, t3 == 1
etc.
这个数字可以轻松地从您的t1
、t2
和t3
创建:
num = t1*100 + t2*10 + t3
下面的 switch-case 实现了您的逻辑。它是您 if 规则的展开版本。
通过不允许多值检查(通过 >= 等),我们需要为每个要处理的组合指定一个规则。
这可能会增加您需要指定的规则数量,但也可能使您的逻辑规则更易读和可维护。
var getFadeInClass = function(t1,t2,t3) {
var num = t1*100 + t2*10 + t3
switch(logic_state){
case 100:; case 200:; case 300: return ".b"
case 10:; case 20:; case 30: return ".c"
case 1: return ".d"
case 110:; case 120:; case 130:;
case 210:; case 220:; case 230:;
case 310:; case 320:; case 330: return ".b.c"
case 101:; case 102:; case 103:;
case 201:; case 202:; case 203:;
case 301:; case 302:; case 303: return ".b.d"
}
return ""
}
您也可以使用数学或其他类型的测试来推理数字。
var x = t1*100 + t2*10 + t3
if ( x != 0 && x%100 == 0) return "b"
if ( x != 0 && x%100%10 == 0) return "c"
if ( x == 1 ) return "d"
但我更喜欢使用switch-case,因为它读起来更加流畅。
您可以在这个fiddle中查看此十进制逻辑的运行版本。
t3 == 0
。 - chris