请教一个优雅的逻辑方案,=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
}

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

8517 次点击
所在节点    程序员
78 条回复
sunshinev
2020-11-24 15:27:11 +08:00
@artikle 其实我现在用的就是你的方案
vitoliu
2020-11-24 15:27:55 +08:00
用模式来做处理不是更好吗,推荐组合模式
Kamiyu0087
2020-11-24 15:30:12 +08:00
when (x) {
1 -> A()
2 -> B()
3 -> {
A()
B()
}
}
marcong95
2020-11-24 15:41:20 +08:00
@hws8033856 #38 刚刚的确看漏了你的“包括”,

我的方案只是代码本身有蜜汁对称性,看着爽。的确是牺牲了可读性,以及没有处理 x 在 123 以外的情况
hst001
2020-11-24 16:11:38 +08:00
你这问题,还刚好 123,就是设计考位运算的题吧
cambria
2020-11-24 16:12:40 +08:00
如果 x 取值只有 1,2,3 的话可以这么写( python):

if (x % 2):
A()
if (x // 2):
B()
supuwoerc
2020-11-24 17:18:17 +08:00
x==1?a:x==2?b:x==3?a&b:null;
wnpllrzodiac
2020-11-24 17:31:47 +08:00
位操作?最低位表示 a 第二位表示 b.
imn1
2020-11-24 18:10:45 +08:00
x&1: A
(x>>1)&1: B
vhysug01
2020-11-24 18:14:02 +08:00
查表
skrskrskrskr
2020-11-24 18:16:31 +08:00
这一看就是工作不饱和
xumng123
2020-11-24 18:52:14 +08:00
查表即可
ychost
2020-11-24 19:10:18 +08:00
Map funcMap = {1:A,2:B,3:A&B}
lovecy
2020-11-24 19:23:23 +08:00
let funcMap = new Map([[1, func A], [2, func B], [3, func C]]);
funcMap.get(x)();
manymobi
2020-11-24 19:47:43 +08:00
我觉得 你在考虑思想, 上面这个问题太局限了, 可以看看 spirng HttpMessageConverter
woahishui
2020-11-24 20:02:35 +08:00
策略模式加命令模式
nocrush
2020-11-24 20:28:36 +08:00
搞一个 map
phpIsNumberOne
2020-11-24 20:44:01 +08:00
goto
jinliming2
2020-11-24 20:52:27 +08:00
支持 Excel 吗?
=SWITCH(A1, 1, "A", 2, "B", 3, "AB", "other")
yeyu1989
2020-11-24 21:33:30 +08:00
decode(x,1,A,2,B,3,AB)

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

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

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

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

© 2021 V2EX