学习一门新语言需要了解的基础-12 if和switch对比
本节内容
- 是否存在性能差异
- 使用场景
- 反汇编对比[付费阅读]
之前初步接触了汇编,然后利用汇编简单了解下函数调用的过程,包括怎么样保护堆栈帧现场和恢复现场。另外做了简单的函数调用参数复制,返回值的传递,类似于这样的一些东西。今天其实是对照之前的东西做简单的应用。
是否存在性能差异
我们知道在很多语言里面都会有这两种选择条件的分支,看上去觉得差不多,除了某些语言有些限制,比如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")
}
}
反汇编对比[付费阅读]
这个系列的每篇文章有大半篇幅内容属于付费阅读。提供微信支付或支付宝支付打赏50元备注留言手动提供付费文章访问密码。
学习一门新语言需要了解的基础-12 if和switch对比的更多相关文章
- [Go] 开始试探一门新语言的五点思考 - Golang
1.如果在其他语言环境中写的代码很烂,那么换一门语言很可能情况更糟,因为是涉及到基本功.工程能力和心思逻辑. 2.一定要了解语言解决的问题(比如:多核并发机制性能高.省机器.简洁易学.资料少),优势是 ...
- python和linux如何学习一门新的编程语言(python)(python基础结构)
1.python 开发 1.1基础 python,java语言优势:可以写网页+后台功能,python开发效率高,执行效率低,java执行效率高,开发效率低 环境变量配置:进入--->控制面板\ ...
- 【程序员技术练级】学习一门脚本语言 python(一)文件处理
现在工作上主要用的语言是java,java在企业级的应用上能够发挥很好的用途,但有时候要做一个小功能时,比如批量更新文件,抓取网页等,这时候用java就显得太笨重了.因此就学习了python这门脚本语 ...
- 【程序员技术练级】学习一门脚本语言 python(二)遍历本地文件系统
这篇将讲述怎么使用python来遍历本地文件系统,并把文件按文件大小从小到大排序的一个小例子 在这个例子中,主要会用到python内置的和OS模块的几个函数: os.walk() : 该方法用来遍历指 ...
- 【程序员技术练级】学习一门脚本语言 python(三)跟数据库打交道
接着上一篇,该篇讲述使用python对数据库进行基本的CRUD操作,这边以sqlite3为例子,进行说明.sqlite3 是一个非常轻型的数据库,安装和使用它是非常简单的,这边就不进行讲述了. 在py ...
- 如何深入系统的学习一门编程语言——python自学笔记
前言 最早接触python的时候,他并没有现在这么火,我也没把他太当回事,那时候我对python的印象就是给运维人员使用的一门很古老的语言,显然随着tensorflow(以下简称tf)的兴起,pyth ...
- 跨语言学习的基本思路及python的基础学习
笔者是C#出身,大学四年主修C#,工作三年也是C#语言开发.但在学校里其他的语言也有相应的课程,eg:Java,Php,C++都学过,当然只是学了皮毛(大学嘛,你懂得),严格来说未必入门,但这些语言的 ...
- 如何着手学习一个新的PHP框架
如今的PHP框架层出不穷,名气也各不相同.如何快速掌握一种框架?看看本文吧~ 如今的PHP框架层出不穷,名气也各不相同.我不是这方面的专家,甚至不能熟练地使用其中的一种,所以就不作推荐了.这里我要讨论 ...
- ndk学习之C语言基础复习----虚拟内存布局与malloc申请
在这一次中来学习一下C语言的内存布局,了解它之后就可以解释为啥在用malloc()申请的内存之后需要用memset()来对内存进行一下初始化了,首先来了解一下物理内存与虚拟内存: 物理内存:通过物理内 ...
随机推荐
- Oracle中Union与Union All的区别(适用多个数据库)
Oracle中Union与Union All的区别(适用多个数据库) 如果我们需要将两个select语句的结果作为一个整体显示出来,我们就需要用到union或者union all关键字.union(或 ...
- 用static声明的函数和变量小结
static 声明的变量在C语言中有两方面的特征: 1).变量会被放在程序的全局存储区中,这样可以在下一次调用的时候还可以保持原来的赋值.这一点是它与堆栈变量和堆变量的区别. 2).变量用static ...
- LinkedHashMap 源码解析
概述: LinkedHashMap实现Map继承HashMap,基于Map的哈希表和链该列表实现,具有可预知的迭代顺序. LinedHashMap维护着一个运行于所有条目的双重链表结构,该链表定义了迭 ...
- C语言编程练习(一)
问题一: 问题描述:输入n个数,n<=100,找到其中最小的数和最大的数 输入样例: 4 1 2 3 4 输出样例:14 #include " ...
- 不可不知的socket和TCP连接过程
html { font-family: sans-serif } body { margin: 0 } article,aside,details,figcaption,figure,footer,h ...
- [Sdoi2010]星际竞速
个人对山东省选已经十分无语了,做了三道题,都TM是费用流,这山东省选是要干什么,2009--2011连续三年,只要会费用流,然后建个边,跑一跑就过了. 10 年一度的银河系赛车大赛又要开始了.作为全银 ...
- cannot be cast to javax.servlet.Servlet
在第一次开发Maven项目时,maven环境和仓库以及eclipse都和讲师讲解的一样,可是却遇到下面这个问题: java.lang.ClassCastException: servlet.UserS ...
- 为什么ABAP开发者需要使用面向对象技术?
ABAP对面向对象的支持已有十多年的历史,然而在生产实践中,我们对这门技术的应用十分有限. 一方面,面向过程的惯性长期存在着:另一方面,对于大部分二次开发工作而言,似乎并没有足够的理由促使开发者使用面 ...
- SpringMVC中redirect跳转后如何保存Model中的数据?
@RequestMapping(value = "delete-user", method = RequestMethod.POST) public String deleteUs ...
- ubuntu中使用usb-creator制作live usb
1.实验环境 ubuntu14.04 2.启动usb-creator 2.1 单击桌面左上角的搜索图标,输入usb-creator,然后选择“应用程序"中的”启动盘创建器“ 2.2 终端中输 ...