请教一个优雅的逻辑方案,=1 走 A ,=2 走 B, =3 走 AB 两个,怎么写比较好?不限语言

2020-11-24 11:58:57 +08:00
 sunshinev

请教一个最优逻辑方案,=1 走 A,=2 走 B, =3 走 AB 两个,怎么写比较好?

if x==1 {
	A
}elseif x==2 {
	B
}else {
	A
    B
}

要求如上,有优雅的写法吗?

8502 次点击
所在节点    程序员
78 条回复
sunshinev
2020-11-24 13:20:53 +08:00
@Rekkles 三元运算符👍,go 木有
DoubleShut
2020-11-24 13:21:41 +08:00
花里胡哨的,switch case 不行吗?
sunshinev
2020-11-24 13:22:31 +08:00
@secondwtq 学习了,推荐大家可以看下 簡單的 FizzBuzz 藏有 深度(google 面試題)
yaoweilei
2020-11-24 13:23:09 +08:00
go="A" if x==1 else "B" if x==2 else "C"
Lemeng
2020-11-24 13:23:26 +08:00
文明人讲究优雅。
leo108
2020-11-24 13:45:09 +08:00
switch (x) {
case 3:
// no break
case 1:
A;
if (x === 1) {
break;
}
case 2:
B;
break;
}
antiquezzz
2020-11-24 13:56:50 +08:00
兄弟不会真的以为会写 FizzBuzz 很难得吧
rainman777
2020-11-24 14:05:06 +08:00
```
if (n & 0x01)
fun_a();
if (n & 0x02)
fun_b();

```
hws8033856
2020-11-24 14:15:07 +08:00
为什么你们包括 LZ 都不按题目要求来?
不是=3 才执行 AB 么?
你们怎么都是除=1 和=2 以外的其他值都执行 AB ?
Jooooooooo
2020-11-24 14:25:39 +08:00
最优的解法最容易看懂
shenjies88
2020-11-24 14:32:48 +08:00
这就是一个很简单的问题,切勿过度设计过度猜疑,if 或者 switch 即可
marcong95
2020-11-24 14:48:36 +08:00
@hws8033856 #29 因为楼主的提供的样例里面就是 else { AB },那么问题来了,到底是 else AB 呢,还是=3 AB 呢,如果 x = 4 呢,楼主这题似乎已经有这个坑了

若 x 属于 { 1, 2, 3 },那位运算+短路求值看着还挺舒服

x & 1 && A()
x & 2 && B()
northisland
2020-11-24 15:00:33 +08:00
一条搞定,但是很鬼畜,可读性不高。
```
#include <ciso646>

x&0x01 and A() or y&0x02 and B();
```
我宁愿展开:
if (x==1) A()
else if (x==2) B()
else if (x==3) {A(); B();}
sunshinev
2020-11-24 15:01:00 +08:00
其实看到很多位运算方案,但是总觉得位运算看起来很短,但是不是很容易理解~可能我还没找到窍门
lloydsheng
2020-11-24 15:03:37 +08:00
如果没有性能问题,写的越清晰易懂越好
terence4444
2020-11-24 15:04:36 +08:00
按 bit 开关判断即可
1A 2B 4C 8D 16F
zlowly
2020-11-24 15:05:52 +08:00
那要看不同场景下优雅是怎么定义了。如果这是在一个追求性能的的核心代码 /引擎之类的里,肯定是有优化空间;如果只是个普通代码片段,楼主本身的代码就没什么问题;如果是在业务逻辑代码里,可考虑的地方就多了,常见的是日后考虑调整或扩展=4=5 之类情况,有可能是更复杂的 ABCBA 执行情况等等,为了可读性和可维护性这时候上模式设计都是可以的。
hws8033856
2020-11-24 15:06:37 +08:00
@marcong95 所以我才说“包括 LZ” 都不按题目要求来
只论代码长短,应该没有比你这个更短的了
不过我始终认为所谓代码的优雅,应该更多要看重代码的可读性
你这里用逻辑运算符来替代分支,就是很严重的破坏可读性,不优雅
lx0758
2020-11-24 15:16:02 +08:00
位运算
artikle
2020-11-24 15:22:48 +08:00
if(x==1||x==3)
A();
if(x==2||x==3)
B();

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/728657

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX