请教一个优雅的逻辑方案,=1 走 A ,=2 走 B, =3 走 AB 两个,怎么写比较好?不限语言
请教一个最优逻辑方案,=1 走 A,=2 走 B, =3 走 AB 两个,怎么写比较好?
if x==1 { A }elseif x==2 { B }else { A B }
要求如上,有优雅的写法吗?
请教一个最优逻辑方案,=1 走 A,=2 走 B, =3 走 AB 两个,怎么写比较好?
if x==1 { A }elseif x==2 { B }else { A B }
要求如上,有优雅的写法吗?
如果只是单纯想减少代码行数(然鹅可读性会变差)的话,考虑位运算:
if x & 1 {
A
}
if x & 2 {
B
}
x == 3 的时候,两个判断都是 true,AB 都运行
Input = A | B // equals 3
if (Input & A) /* DO A */
if (Input & B) /* DO B */
if (Input & C) /* DO C */
if (Input & D) /* DO D */
将 ABCD 编码成 2 的 n 次方,然后可以用 | 运算来组合配置项,用 & 运算来检查配置项,
这在 C 编程中很常用,例如:
if (SDL_Init(SDL_INIT_VIDEO|SDL_INIT_AUDIO) != 0) {
从 C 升级到 C++折腾版后,还有一个 Map<fnPtr,fnPtr>(Condition,Action),就是判断条件比较复杂时,挨个遍历 map 执行 condition,执行 action···· 按简单数值比较场景来说就不用了。
自然的表达即“本来是什么意思就表达什么”。
$f[x]();
if(x!=2){
A()
}
if(x!=1){
B()
}
“`
若 x 属于 { 1, 2, 3 },那位运算+短路求值看着还挺舒服
x & 1 && A()
x & 2 && B()
x&0x01 and A() or y&0x02 and B();
“`
我宁愿展开:
if (x==1) A()
else if (x==2) B()
else if (x==3) {A(); B();}
我的方案只是代码本身有蜜汁对称性,看着爽。的确是牺牲了可读性,以及没有处理 x 在 123 以外的情况
if (x % 2):
A()
if (x // 2):
B()
我觉得越简单,用简单清晰的代码写出来就行了
2 根据用途挑选 helper 组成 handler
3 handler 注册进 factory
DemoFatoryHandlerRegistry{1:AHandler, 2:Bhandler,3ABHandler}
4 根据 id 获得 handler 接口
DemoFactory::fromId(int id)->getHandler():HandlerInterface
5 根据接口处理数据
HandlerInterface->dosomething();
}]
if(runA.indexOf)
}
runners.forEach((runner) => {
if(runner.x.indexOf(x) !== -1)
runner[‘func’]();
})
}
//固定 ab 但是条件有后续扩展
function run(x) {
const runA = [1,2];
const runB = [2,3];
if(runA.indexOf(x) !== -1)
a();
if(runB.indexOf(x) !== -1)
a();
}