浅析switch和if(开发中这两者的优缺点;分析出优缺点在使用就能更确定自己需要使用哪个函数了)
分析 Switch 相较于 if 的优点
1、switch 执行效率 高于 if 的执行效率
分析:
switch是在编译阶段将子函数的地址和判断条件绑定了,只要直接将a的直接映射到子函数地址去执行就可以了,
if处理起来首先要把a的值放到CPU的寄存器中,然后要把比较的值放到CPU的另一个寄存器中,然后做减法,然后根据计算结果跳转到子函数去执行,这样一来就要多出3步的操作了,如果逻辑判断多的话,那么将会比switch多处许多倍的操作,尽管寄存器操作的速度很快,但是效率方面还是不如switch ;
2、代码清晰简单易读;
如下例子很清晰看到 什么条件下可以执行哪个子函数
分析 Switch 相较于 if 的缺点
1、阅读一下代码快速寻找到问题
let a = 0;
switch(a){
case 0:
console.log("let is 0 ")
break;
case 1:
console.log("let is 1 ")
case 2:
console.log("let is 2 ")
}
缺点一、语法正确,逻辑错误
在第8行和第10行下面我没有添加关键字break; 这就导致这段代码的行为逻辑与我的设计初衷不符了。
缺点二、语法比较死板
switch尽管对于break很宽容,但是对判断条件很严苛,case后面只能跟常量
缺点三、需要子函数来处理分支
这个缺点跟缺点一有关,为了防止漏写break
为什么要使用break来做一个判断结束呢?
最初代码中是没有子函数的概念的,那时候都是用goto随意跳转的,你想去第10行代码,很简单goto 10就可以了。这种编程思维在C的早期阶段还是一直受到影响的,因此早期的C也没有子函数,都是一堆逻辑处理混乱在一起,goto满天飞,所以那时候你没有一个最强大脑是写不了程序的。那为了告诉程序我这里条件判断处理结束,就添加了break作为终止符号。
浅析switch和if(开发中这两者的优缺点;分析出优缺点在使用就能更确定自己需要使用哪个函数了)的更多相关文章
- EBS OAF开发中实现參数式弹出窗体
EBS OAF开发中实现參数式弹出窗体 (版权声明,本人原创或者翻译的文章如需转载,如转载用于个人学习,请注明出处:否则请与本人联系,违者必究) 概览 參数式弹出窗体和嵌入式弹出窗体不一样,它拥有独立 ...
- Filter组件开发中的SDK基类分析
DirectShow SDK提供了一套开发Filter的基类源代码.基于这些基类开发Filter将大大简化开发过程. 1.CBaseObject 大部分SDK类都从CBaseObject类(参见com ...
- (转) 浅析HTML5在移动应用开发中的使用
(转)浅析HTML5在移动应用开发中的使用 (原)http://www.iteye.com/magazines/67 2012-03-07 来自 UECD.163.com 编辑 wangguo ...
- Android源码浅析(四)——我在Android开发中常用到的adb命令,Linux命令,源码编译命令
Android源码浅析(四)--我在Android开发中常用到的adb命令,Linux命令,源码编译命令 我自己平时开发的时候积累的一些命令,希望对你有所帮助 adb是什么?: adb的全称为Andr ...
- 浅析Android Camera开发中的三个尺寸和三种变形 (贡献一个自适配Picturesize和Previewsize的工具类)
转至 (http://blog.csdn.net/yanzi1225627/article/details/17652643) 经常听人问Camera开发中,各种变形问题,今天有空就在此梳理总结下. ...
- 提升代码幸福度,五个技巧减少js开发中的if else语句
壹 ❀ 引 在JavaScript开发中,条件判断语句的使用频率是极高的,而对于条件判断简单易读的if else应该都是大家的首选.可是代码写的久了,我们总是希望自己的代码看着能更为简洁规范(逼格更 ...
- 关于 WP 开发中.xaml 与.xaml.cs 的关系
今天我们先来看一下在WP8.1开发中最长见到的几个文件之间的关系.比较论证,在看这个问题之前我们简单看看.NET平台其他两个不同的框架: Windows Forms 先看看Window Forms中的 ...
- IOS 开发中要注意的事项
1.关于拍摄 TGCameraViewController – 基于 AVFoundation 的自定义相机.样式漂亮,轻量并且可以很容易地集成到 iOS 项目中.不会内存吃紧 2.block 中对控 ...
- WEB开发中的字符集和编码
html,body,div,span,applet,object,iframe,h1,h2,h3,h4,h5,h6,p,blockquote,pre,a,abbr,acronym,address,bi ...
- H5开发中的问题总结
最近公司做了一个出行日记的项目,里面的页面十多页,天天加班,做到吐血.总体来说,写页面的时候虽然是十多个页面,其实难度还是在每个页面的特效上.公司是易到用车,出行日记的页面在APP里有生成入口,有兴趣 ...
随机推荐
- LLaMA:开放和高效的基础语言模型
LLaMA:开放和高效的基础语言模型 论文:https://arxiv.org/pdf/2302.13971.pdf 代码:https://github.com/facebookresearch/ll ...
- [人生感悟]做人、做事的"人生十悟"【转载】
做人.做事.做官,是不少人需要经常面对和正确把握的大问题,处理好了,则健康成长,反之则裹足不前,甚至掉入人生的一个个"陷阱",这其中有规律可循,总结"十悟"可思 ...
- [MySQL]innodb_flush_log_at_trx_commit与sync_binlog
1 innodb_flush_log_at_trx_commit 辨析 innodb_flush_log_at_trx_commit = 0 : 每秒将日志缓冲区写入log file,并同时flush ...
- Tkinter库的使用
from tkinter import *import tkinter as tkfrom tkinter import Tk, Label,ttkfrom PIL import Image, Ima ...
- 重新理解RocketMQ Commit Log存储协议
本文作者:李伟,社区里大家叫小伟,Apache RocketMQ Committer,RocketMQ Python客户端项目Owner ,Apache Doris Contributor,腾讯云Ro ...
- linux shell 自动化部署 npm vue 项目
此 shell 是提供给前端登录服务器自动化部署 vue 项目的 用此命令,工具化部署项目,可以杜绝前端自己部署项目时,对服务器违规操作 如有其它问题,可在下方留言! #!/bin/sh # url: ...
- .NET实现解析字符串表达式
一.引子·功能需求 我们创建了一个 School 对象,其中包含了教师列表和学生列表.现在,我们需要计算教师平均年龄和学生平均年龄. //创建对象 School school = new School ...
- ts、typescript、enum、枚举、ts 获取枚举对应的类型、获取 enum 的 key 和 value
ts.typescript.enum.枚举.ts 获取枚举对应的类型 // 假设我一个枚举 enum ENUM_TYPE { ALL = 'all', SOME = 'some', LITTLE = ...
- OpenAI的离线音频转文本模型 Whisper 的.NET封装项目
whisper介绍 Open AI在2022年9月21日开源了号称其英文语音辨识能力已达到人类水准的Whisper神经网络,且它亦支持其它98种语言的自动语音辨识. Whisper系统所提供的自动语音 ...
- 封装统一请求状态返回Result
1.测试数据 public class Test { public static void main(String[] args){ System.out.println("Response ...