《代码大全》读书笔记——week4

《代码大全》代码高效规范部分读书笔记

前三周看的是C++/C高质量编程,将全书看完后,为了进一步了解与提高编写的代码的规范性与高效性,更深刻的了解相关知识,因此,我特地挑选了代码大全中与之前所读的C++/C高质量相类似的第八章与第十一章进行阅读,与之前三周所学进行对比,互为补充,加深自己的印象以及理解。

第八章:防御式编程

主要思想:子程序应该不因传入数据错误而遭到破坏,哪怕是由其它子程序产生的错误数据

8.1 保护程序免遭非法数据的破坏

检查所有来源于外部的数据的值;检查子程序所有输入参数的值;觉得如何处理错误的数据

8.2 断言(assertions)

断言是指在开发期间使用的,让程序进行自检的代码;一个断言通常含有连个参数,一个描述假设为真时的情况的布尔表达式,和一个断言为假时需要显示的信息;

关于断言的一些指导性建议:

1.        用错误代码来处理预期会发生的情况,用断言来处理绝不应该发生的情况

2.        避免把需要执行的代码放入断言

3.        用断言注解并验证前后条件

4.        对于高健壮型的代码应该先试用断言再处理错误

8.3错误处理技术

处理预料中可能发生的错误的方法:换用下一个正确的数据;返回与前次相同的数据;换用最接近的合法值;把警告信息记录到日志文件中;返回一个错误码;调用错误处理子程序或对象;当错误发生时显示错误信息;用最妥当的方式在局部处理错误;关闭程序等

错误处理最恰当的方式要根据错误出现的软件的类别而定,有时侧重于正确性,有时侧重于健壮性

8.4 异常

异常是把代码中的错误或异常事件传递给调用方代码的一种特殊手段,还可以用异常来清理一段代码中存在的杂乱逻辑(用try_catch重写)

建议:用异常通知其它程序发生了不可忽略的错误;真正例外的情况才抛出异常(程序的复杂度会增加);不能用异常来推卸责任,若错误情况可以在局部处理,那就再局部处理掉它;避免在构造函数和析构函数中抛出异常,除非在同一地方将它们捕获(?);在恰当的抽象层次抛出异常(?);在异常消息中加入关于异常的全部信息;避免使用空的catch语句;了解所用库函数可能抛出的异常;考虑创建一个集中的异常报告机制;把项目中对异常的使用标准化;考虑异常的替换方案

8.5 隔离程序,使之包容由错误造成的伤害

让软件的某些部分处理“不干净”的数据,而让另一些部分处理“干净”的数据,即可让大部分代码无须担负检查错误数据的职责

在输入数据时将其转化为恰当的类型

隔栅外部的程序应使用错误处理技术,在隔栅内部的数据应使用断言处理

8.6 辅助调试的代码

1.不要自动地把产品版的限制强加于开发版上,应在开发期间牺牲一些对速度和资源的使用,来换取一些可以让开发更顺畅的内置工具

2.尽早引入辅助调试的代码

3.采用进攻式编程,有时候最好的防守是采取大胆的进攻,在开发时惨痛地失败,能让你在发布产品后不会败地太惨

4.计划移除调试辅助的代码:使用类似ant和make这样的版本控制工具和make工具;使用内置的预处理器;编写自己的预处理器;使用调试存根

8.7 确定在产品代码中该保留多少防御式代码

保留那些检查重要错误的代码,去掉检查细微错误的代码,去掉导致程序硬性崩溃的代码,保留可以让程序稳妥崩溃的代码,为技术支持人员记录错误信息,确认在代码中留的错误信息是有好的

过度的防御式编程也会引起问题

第十一章变量名的力量

为变量取好名字同高效编程一样重要

11.1 选好变量名的注意事项

要以问题为导向,选取适当的名字长度;较长的名字适用于很少用到的变量或者全局变量,较短的名字适用于局部变量或循环变量;

变量名中的计算限定词加到名字最后:total,sum,average,max,min,record,string,       pointer等;

11.2 为特定类型的数据命名

为循环下标命名:i,j,k——RecordCount,TeamIndex等;

为状态变量命名:flag——StatusFlag,PrintFlag等;

为临时变量命名:temp——discriminant等;

为bool变量命名:done,error,success,ok,found等;

11.3 命名规则的力量

11.4 非正式命名规则

区分方法:大小写、加前缀、明确的名字等;

11.5 标准前缀

用于文字处理程序的示例:ch,doc,pa,scr(screen region),sel(selection),wn(window);

语义前缀:c(count),first,g(global variable),lim,p;

11.6 创建具备可读性的短名字

缩写的一般指导原则:去掉所有非前置元音;去掉虚词and,or,the;去掉无用后缀ing,ed等;保留每个音节中最引人注意的发音

例如:computer——comptr,screen——scrn,apple——appl,integer——intgr

总结:好的变量名是提高程序可读性的一项关键要素,对特殊种类的变量,如循环下标和状态变量需特殊考虑;名字要尽可能具体,确保所取的名字更侧重于阅读方便而不是编写方便。

原文地址:https://www.cnblogs.com/wispytrace/p/8676428.html

时间: 2024-10-25 17:47:47

《代码大全》读书笔记——week4的相关文章

代码大全读书笔记 - 开篇

说起来,<代码大全>这本书书名实在恶俗.在我推荐给展鸿的时候,他说"雾草,这名字看着就像天朝地摊那种XX全书一类的山寨书-" 是的,其实买这个书的原因就是京东买100减30,我买了10块钱的东西,凑了一下单,书到手之前还以为是代码清单,或者以前ACM模板一样的书,甚至买来的一个月里面都拿来当枕头(足足10+cm厚). 这个周末偶然的翻开,才发现,世界上竟然有如此精彩的书,而且很多东西讲的虽然是软件项目,但给了我很多引申到其他东西上面的灵感.很多地方我读到之后,都会兴奋的心跳

代码大全读书笔记

在元旦假日看完了这本书,算上目录的话差不多1000页吧,由于这本书主要讲述了思想和流程体系,至于代码结构和优化这一块, 之前有看过设计模式,所以我到也就是过了一遍,所以总体看的很快的并没有精读,至于笔记那也就记了一小部分.基本上并无特别 指出. 但我对这本书的评价还是挺高的,这本书把软件体系的方方面面都进行了总结,通过抛出问题,举出范例然后再加以正确的思路引导. 不过对我而言本书最大的收获并不是了解了软件开发体系,或是高质量的编写代码的方法,而是发现了软件体系中那些边边角角的工作 一些我们常常抱

代码大全读书笔记1---进入软件构建的世界

构建实质建设的过程,构建的过程包含计划.设计.检查工作的一些方面. 软件开发过程中的各种不同的活动: 1.定义问题(problem definition) 2.需求分析(requirements development) 3.规划构建(construction planning) 4.软件架构或高层设计(software architecture or high-level design) 5.详细设计(detailed design) 6.编码与调试(coding and debugging)

代码大全读书笔记(二)

选择编程语言 程序员使用熟悉的编程语言生产率高于使用不熟悉的编程语言,并且高级语言比低级语言的效率要高得多,作者列出了几种高级语言的每一行代码与等效的c语言代码行数之比.比如java是2.5,而perl和python就是6.而且编程语言影响程序员的思维随处可见,作者举了个他遇到的项目,那就是一群fortran程序员去写c++,最后写出来的代码就是伪装成c++的fortran代码.   说道表达能力,象python,perl,ruby之类的脚本语言是c或者java之类的不能比的,就像上面作者给出的

代码大全读书笔记(一)

开始读时,并没有打算读完.因为书太厚了时间也不充足,当我看过前言后,发现可以跳读,所以我就从符合我身份的一章--11章读起 变量名的力量: 刚开始学C语言时,什么都不了解,所以对代码的细节养成也不是很好,写代码写变量名总是跟着感觉走,因为都是作业形式,所以起什么变量名都无所谓,下次也不会再看曾经写过的代码了.然而,当我的学习逐渐深入时,写的代码越来越长(当然也不会太长),记忆变量的含义就产生了困难,但是由于年轻,记忆力好,所以记得住就过去了.随着时间的流逝,总有一天在新的项目中发现其中的小部分很

代码大全读书笔记2---用隐喻来充分理解软件开发

借助隐喻可以更加深刻地理解软件开发的过程.通过把不太理解的东西和一些你较为理解.且十分类似的东西做比较,这样可以对不太理解的东西产生更深刻的理解,这种使用隐喻的方式叫做建模. 隐喻的威力在于其生动性,能够让你把握整个概念,暗示各种属性.关系以及需要查证的部分.但是过度引申时,模型也会误导人们. 软件隐喻的作用更像是启示,而不是算法,告诉你如何去寻找答案.算法是一套定义明确的指令使你完成某个特定的任务,算法是可预测的.确定的.不易变化的. 算法与启发式方法之间的区别就在于其距离最终解决办法的间接程

JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记3

技术非常多,样例非常多.仅仅好慢慢学,慢慢实践!!如今学的这本书是[JavaScript实战----JavaScript.jQuery.HTML5.Node.js实例大全] JavaScript.jQuery.HTML5.Node.js实例大全-读书笔记2 3.3 响应鼠标动作 图3-2的效果已经有了,须要鼠标来操作展示想看的照片.这就须要在对应的地方加上事件. 3.3.1 响应小照片单击动作 在3.2.3的代码里提供了显示小图列表的eg.showThumb()方法.在单击小图片时要显示大图片.

JavaScript、jQuery、HTML5、Node.js实例大全-读书笔记2

技术很多,例子很多,只好慢慢学,慢慢实践!!现在学的这本书是[JavaScript实战----JavaScript.jQuery.HTML5.Node.js实例大全] JavaScript.jQuery.HTML5.Node.js实例大全-读书笔记1 3.2 照片加载与定位 根据功能设计,可以先写好 HTML 结构基础,再配好 CSS 做出大致效果,最后用 JavaScript加上各种动作.首先请看 HTML 代码结构. 3.2.1 HTML 代码 CSS代码保存到 eg3.css 文件中,Ja

简单使用Git和Github来管理自己的代码和读书笔记

以前不知道使用代码管理工具,最后写的一些东西都没有了,由于硬盘坏了或者不小心格式化了之类的,后来使用了Git 和Github来托管自己的代码和读书笔记方便了不少,到哪里只要有网就可以把自己的东西拷贝下来继续使用. 我这里简单的记录一下我使用的过程,最简单的使用都是,高级的功能我一直没有使用到,虽然买一本<Git权威指南> 但是很多东西用不到就不能够真的会.下面开始简单介绍我使用的方法,我这个是在windows上使用的.我使用分两种情况, 因为我的代码都是在Linux下写的,所以在linux下主

代码大全学习笔记(什么是构建)

  构建有时也被认为是"coding"或者"programing".编码算不上是最贴切的词,因为它有一种"把已经存在的设计机械化的翻译成计算机语言"的意味,而构建并不是机械化的,需要可观的创造力和判断力,人们常常用编程代替构建.   构建的步骤: 1.验证前面的工作已经完成(如定义问题,需求分析). 2.确定如何去测试所写的代码. 3.设计并编写类或者子程序. 4.创建并命名变量和具名常量. 5.选择控制结构,组织语句块. 6.对你的代码进行单元