JavaScript中的位掩码与if..then
我正在开发一个应用程序,它在不同的地方包含很多标志检查,比如JavaScript中的位掩码与if..then,javascript,bitwise-operators,Javascript,Bitwise Operators,我正在开发一个应用程序,它在不同的地方包含很多标志检查,比如 if (a && b && c) { func1() } else if (a && !b && c) { func2() } else if (!a && b && !c) { func3() } ... 有时,一个序列中可能有10个检查 当我有超过3张支票时,这张支票看起来相当笨重。 我读过关于逐位运算的书,我认为它可以给我一个优雅
if (a && b && c) { func1() }
else if (a && !b && c) { func2() }
else if (!a && b && !c) { func3() }
...
有时,一个序列中可能有10个检查
当我有超过3张支票时,这张支票看起来相当笨重。
我读过关于逐位运算的书,我认为它可以给我一个优雅的解决方案
const ACTIONS = {
0: func0,
1: func1,
2: func2,
3: func3,
4: func4
// ...
}
ACTIONS[a | b | c]()
不过,我想知道在不同级别的程序员工作的实际项目中使用这些实践是否是一种好的实践。我不想成为一个聪明人,但为了让代码更优雅,尽管更容易阅读,我应该继续使用
if…else
,还是应该开始使用按位操作?是的,我认为按位是一个更好的解决方案
const ACTIONS = {
0: func0,
1: func1,
2: func2,
3: func3,
4: func4
// ...
}
ACTIONS[a | b | c]()
使用带有二进制文字的
开关
块作为大小写标签可能会更清楚:
switch (foo){
case 0b111: /*corresponds to true-like a, b, and c*/
func1();
break;
case 0b101: /*corresponds to true-like a and c*/
func2();
break;
等等,
foo
是a
、b
和c
的适当函数,可能使用类似于4*a+2*b+c
imho的方法生成,您的队友应该学习位运算。也就是说,我们不能说这实际上是一个好的选择,因为你没有提供一个真实世界的例子:——|我认为这将取决于位掩码的暴露程度。为a、b、c
提供一个掩码,您的队友是否需要编写mask=mask^2
将b
设置为false,或者您是否提供一些抽象,如set_param(name,value)
并在引擎盖下处理XORing?您如何确保每个人都跟踪十个参数的顺序?请记住,案例数量受整数大小的限制。例如,在某些情况下,您无法测试超过32个值。您不是指32个单独的标志吗?这就给了你2到32次方的可能情况!我是说32个“参数”,对不起:-)