读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句
组织直线型代码 + 使用条件语句
希望我的读书笔试能带你翻过18页的书 http://www.cnblogs.com/jerry19880126/
《代码大全》第14章和第15章的内容比较少,这里就写在一起了。首先看第14章——组织直线型代码,本章主要讲了两个知识点。
第一个知识点是怎样书写出有明确顺序的代码,以书上的例子来说:
1 data = ReadData(); 2 results = CalculateResultsFromData(data); 3 PrintResults(results);
这三行代码具有鲜明的时间顺序,即前一条语句的输出是后一条语句的输入。
但如果是这样的代码:
1 ComputeMarketingExpense(); 2 ComputeSalesExpense(); 3 CompusteTravelExpese(); 4 DisplayExpensesSummary();
第四句能明显看出放在最后,但前三句就看不出明显的先后顺序,如果我们试图把变量初始化放在第一句ComputeMarketingExpense()中,那就容易出问题了,假设你是这段代码的作者,可能不会认为有问题,只要自己记得先执行ComputeMarketingExpense()就行了,但万一这段代码交由另一名程序员维护呢?万一他想调换一下顺序呢?有明确顺序要求的代码应当有所体现!
一种方法是添加注释,但这不是最好的方法,代码的最高境界是具有自明性(别的程序员一眼就能看出这段代码是干什么的),所以要是想对变量初始化,可以单独写一个函数,如:
1 InitializeExpenseData(expenseData); 2 ComputeMarketingExpense(); 3 …
这样代码的维护人员就知道哪一句话应该最先执行了,但这里要注意一下,InitializeExpenseData()的参数应该为指针或引用,不然无法有效地做到变量的初始化。
第二个知识点是有效地组织顺序无关的语句,还是以书上的例子来说明:
1 MarketingData marketingData; 2 SalesData salesData; 3 TravelData travelData; 4 5 travelData.ComputeQuarterly(); 6 salesData.ComputeQuarterly(); 7 marketingData.ComputeQuarterly(); 8 9 salesData.ComputeAnnual(); 10 marketingData.ComputeAnnual(); 11 travelData.ComputeAnnual(); 12 13 salesData.Print(); 14 travelData.Print(); 15 marketingData.Print();
这样看上去是不是有些乱?虽然每段都执行相同的操作,但发起对象的排列顺序却是不一致的,不熟悉代码的人,看到你写的每一句话,都会往前查看对象的定义。但如果这样分组:
1 MarketingData marketingData; 2 marketingData.ComputeQuarterly(); 3 marketingData.ComputeAnnual(); 4 marketingData.Print(); 5 6 SalesData.salesData; 7 salesData.ComputerQuarterly(); 8 salesData.ComputerAnnual(); 9 salesData.Print(); 10 11 …
这样就清楚多了,也符合“不要让变量出生太早”的原则,使其生存时间尽量短,这样我们的精力会更集中。
第15章介绍条件语句,if…else 和 switch语句,入手很简单,但有一些需要注意的地方。比如if和else里的语句顺序有没有关系,比如检测输入是字符还是标点符号,是
if(输入的是字符)
{…}
else if(输入的是标点)
{…}
比较好,还是
if(输入的是标点)
{…}
else if(输入的是字符)
{…}
比较好呢?
看似差不多,但其实第一种写法更好,因为字符出现的概率更大。如果出现的是字符的话,采用第一种写法,只要经过第一个if语句的判断就可以了,但如果采用第二种写法,则需要经过两个if语句的判断才可以。所以把出现概率大的判断放在前面要好!
另外,要确保所有的情况都考虑到了,还是上面的那个例子,万一输入的既不是字符也不是标点怎么办?欠考虑的情况会引发程序的崩溃!所以最佳的写法是:
if(输入的是字符)
{…}
else if(输入的是标点)
{…}
else
{…}
在最后的else语句中写上没有考虑到的情况,通常是错误的代号,以及对用户的提示,如“请致电XXX,我们去尽快为您解决问题”。类似地,在switch语句中,不要忘了default。
最后,不要在if语句中使用switch,也不要在switch中冒出if语句,这样的混用结构很糟糕!同时也不要为了迎合switch的输入要求(只能是整型、枚举、字符型和布尔),而写出下面的代码:
action = userCommand[0]; // 太可怕了,只提取了用户输入单词的第一个字符 switch(action) { case ‘c’: Copy(); break; case ‘d’: Delete(); break; … }
用户输入copy时,当然调用Copy()了,但万一用户输入的是chello等乱七八糟的单词,也会导致Copy()的调用,这可不行,这种情况就不要用switch(因为switch不支持字符串的Case),就用if(userCommand.equals(“…”)) else if(…)…来代替,注意字符串的比较用strcmp,strncmp等函数,或者自己写一个equals()函数,但千万不要用==号。
<end>
转载于:https://www.cnblogs.com/jerry19880126/archive/2012/12/23/2829926.html
读书笔记_代码大全_第14章_组织直线型代码_第15章_使用条件语句相关推荐
- 《代码大全2》第14章 组织直线型代码
目录 前言 14.1 必须有明确顺序的语句 14.1.1 组织语句的原则 14.2 顺序无关的语句 14.2.1 使代码自上而下的阅读 14.2.2 把相关的语句组织到一起 <Code_Comp ...
- 读书笔记软件调试之道 :从大局看调试-发现代码存在问题
声明:本文档的内容主要来源于书籍<软件调试修炼之道>作者Paul Butcher,属于读书笔记.欢迎转载! ---------------------------------------- ...
- 【代码大全】——组织直线型代码
文章目录 组织直线型代码 必须有明确顺序的语句 顺序无关的语句 核对表 Key Points 组织直线型代码 本章从以数据为中心的编程观点转到以语句为中心的观点上. 即按先后顺序放置语句和语句块. 尽 ...
- 王道出版的机试指南_【读书笔记】《王道论坛计算机考研机试指南》 第四、五章...
第四章 数学问题 一.%运算符 1. a%b中a.b必须为整型变量,不能为浮点数:b变量必须为非0值,否则程序异常终止: 2. 若a为正数,则表达式结果为非负数:若a为负数,则表达式结果为非正数:与b ...
- python画图代码大全-Python Matplotlib 绘图使用指南 (附代码)
雷锋网(公众号:雷锋网)按:本文为雷锋字幕组编译的技术博客,原标题 Matplotlib Plotting Guide, 作者为 Prince Grover. 翻译 | 李振 于志鹏 整理 | 凡江 ...
- [读书][笔记]WINDOWS PE权威指南《一》PE的原理和基础 之 第一章 环境搭建及简单破解
文章目录 前言 前期准备 1.1 开发语言MASM32 1.1.1 设置开发环境 下载安装masm 环境变量配置 测试是否配置成功 1.1.2 开发第一个源程序HelloWorld.asm 配置 代码 ...
- python代码大全表解释-【初学】Python异常代码含义对照表
原标题:[初学]Python异常代码含义对照表 Python常见的异常提示及含义对照表如下: 异常名称 描述 BaseException 所有异常的基类 SystemExit 解释器请求退出 Keyb ...
- python代码大全表解释-python文件及目录操作代码汇总
前言 在python中,内置了文件(file)对象,通过一些内置的方法就可以实现对文件的操作,例如open()方法创建一个文件对象,write()方法向文件写入内容. 一.文件基本操作 1.创建和打开 ...
- java练手代码大全手机版_java循环练习的简单代码实例
★打印九九乘法表 public class TestDemo { public static void main(String[] args){ for(int b=1;b<10;b++){ f ...
最新文章
- 基于Golang的CLI 命令行程序开发
- 在线文档预览方案-office web apps
- Biztalk 2006 adapter的开发比2004容易的多
- XSS漏洞自动化攻击工具XSSer
- 四十二、开始Vuex的学习:如何在Vue中使用Vuex
- vue3.x案例 购物车
- PHP5加载|安装外部C动态库
- win7 计算机 打开很慢,Win7电脑网上邻居(网络)打开速度慢的怎么解决?
- c++ 模糊搜索 正则表达式_c++使用正则表达式提取关键字的方法
- dataset的去重计数 g2_AntV 架构演进-G2 篇
- Java最大值和最小值
- linux raid5卷,Linux逻辑卷及RAID5的创建
- 在TortoiseSVN使用clean up
- NOIP模拟题 栅栏
- win10系统自带图标/壁纸位置
- c++学习————VC报错解决方案(vc2013)
- 简单的下载者木马分析(2)dll部分
- Playrix《梦想小镇》为何能成为10亿美元独角兽?
- 作业python 内部小卖铺
- JAVA数组元素比较
热门文章
- 判断是否是数字类型php_PHP函数补完:判断变量是否为数字is_numeric()
- Qt文档阅读笔记-Qt对象模型及deleteLater()杂记
- Java笔记-通过注解和插件自动生成get/set和toString方法,使代码结构清晰
- Arduino笔记-温度传感器的使用
- Linux学习笔记-Makefile优化之头文件依赖
- Qt/C++工作笔记-对vector与QVector中erase操作的进一步认识(区别与联系)
- java 中sub,Fn :: Sub中的嵌套Fn :: ImportValue不适用于SAM模板
- Apollo配置中心热加载mysql_Apollo 配置中心部署注意事项
- 深度linux magento,linux下安装magento
- 轴固定位置_轴承的装配与内外圈固定方法,一文让你搞懂