本节内容
- 是否存在性能差异
- 使用场景
- 反汇编对比[付费阅读]
之前初步接触了汇编,然后利用汇编简单了解下函数调用的过程,包括怎么样保护堆栈帧现场和恢复现场。另外做了简单的函数调用参数复制,返回值的传递,类似于这样的一些东西。今天其实是对照之前的东西做简单的应用。
是否存在性能差异
我们知道在很多语言里面都会有这两种选择条件的分支,看上去觉得差不多,除了某些语言有些限制,比如c语言它要求case里面必须要是常量之类的,现在新的语言基本上没有这样的限制。那么这两种有什么样的差异,什么时候该用,什么时候用if,什么时候用switch,甚至很多人说了哪个性能更好。那么我们怎么确认这件事呢?怎么样确认别人说这句话是对的还是错的。我们以go语言为例子来对比这个事情。
使用场景
switch语句更像数据表驱动,if语句更像逻辑驱动。if是先有结论,结论匹配条件。switch更像先给出条件,然后条件去匹配结论。从设计的角度它们俩的方向是反的。switch语句不太适合处理很复杂的逻辑。
它们的使用场景是设计思想的问题。
package main
type Week byte
const (
_ Week = iota
Monday
Tuesday
Wednesday
Thursday
Friday
Saturday
Sunday
)
func example(w Week) {
switch w {
case Monday, Wednesday, Friday:
println("1,3,5")
case Tuesday, Thursday:
println("2,4")
default:
println("6,7")
}
switch {
case w < Thursday:
println("1,2,3")
case w < Saturday:
println("4,5")
default:
println("6,7")
}
}