好的,假设您确实有很多if
s 并且您t
的 s 是固定整数,并且主要目标是您的很多很多“规则”的可读性。然后你可以试试下面的。
首先,我会确保所有t
s 都具有有效值并跳过未定义的情况。如果变量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) {
// for the sake of shortness I use ".b" instead of ".b_class" etc.
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"
但我更喜欢开关盒,因为它读起来更好看。我希望这是您想要实现的目标。:)
你可以在这个 fiddle中查看这个十进制逻辑的运行版本。
干杯,尤文