《代码大全》阅读笔记-13-不常见的数据类型

只有万不得已时才使用全局数据

!!!就近原则!!!注释紧随代码,变量紧随使用它们的地方 ——Tacey

访问器子程序的优势

  • 你获得了对数据的集中控制
  • 你可以确保对变量的所有引用都得到了保护
  • 自动获取信息隐藏的普遍益处
  • 访问器子程序可以很容易转变为抽象数据类型

如何使用访问器子程序:

  • 要求所有的代码通过访问器子程序来存储数据:比如,所有全局以g_开头,除了访问器,其他代码都不得访问
  • 不要把所有的全局数据都扔在一处:尽量把全局数据和访问器子程序打包到适合的类里面
  • 用锁定来控制对全局变量的访问:锁定要求使用或者更新一个全局变量值之前,该变量必须被签出,完成使用之后再签入。(加锁)
  • 在访问器子程序里构建一个抽象层
  • 对一项数据的所有访问都应该在同一个层次上(操作一致性)

降低全局数据的风险:

  • 创建一种命名规则来突出全局变量
  • 为全部的全局变量创建一份注释良好的清单
  • 不要用全局变量来存放中间结果
  • 不要把所有的数据都放在一个大对象中并导出传递,以说明你没有使用全局变量

核对表(使用不常见数据类型的注意事项)

结构体

  • 你使用结构体而不是使用单纯的变量来组织和操作相关的数据吗?
  • 你考虑创建一个类来代替使用结构体吗?

全局数据

  • 所有的变量是否都是局部的或者是类范围的?除非绝对必要才是全局的?
  • 变量的命名规则能把局部数据、类数据和全局数据区分开吗?
  • 你对所有的全局变量都加以文档说明吗?
  • 避免使用伪全局数据,即被四处传递且包含有杂乱数据的巨大对象吗?
  • 用访问子程序来取代全局数据吗?
  • 把访问子程序和数据组织到类里面吗?
  • 访问器子程序提供了一个在底层数据类型实现之上的抽象层吗?
  • 所有相关的访问器子程序都位于同一抽象层吗?

指针

  • 把指针操作隔离在子程序里吗?
  • 指针引用合法吗?或者说指针有可能成为空悬指针吗?
  • 代码在使用指针之前检查他的有效性吗?
  • 在使用指针所指向的变量之前检查其有效性吗?
  • 指针用完后被设置为空值吗?
  • 就可读性而言,代码用了所有需要使用的指针变量吗?
  • 链表中的指针是按正确的顺序加以释放吗?
  • 程序分配了一片保留的内存后备区域,一遍在耗尽内存的时候能够优雅地退出吗?
  • 是不是在没有其他方法可用的情况下最终才使用指针的?

要点

  • 结构体可以使得程序更简单、更容易理解,以及更容易维护
  • 每当你打算使用结构体的时候,考虑采用类是不是会工作的更好。
  • 指针很容易出错。用访问子程序或类以及防御式编程实践来保护自己的代码。
  • 避免使用全局变量,不只是因为它们危险,还是因为你可以用其他更好的方法取代它们。
  • 如果你不得不使用全局变量,那么就通过访问子程序来使用它。访问器子程序能为你带来全局变量所能带来的一切优点,还有一些额外的好处。

原文地址:https://www.cnblogs.com/taceywong/p/8719316.html

时间: 2024-08-29 10:14:47

《代码大全》阅读笔记-13-不常见的数据类型的相关文章

代码大全阅读笔记(二)

代码大全这本书只看懂了一部分,现只对最有收获的部分写入笔记里 第七章 创建子程序的正当理由 (1)降低复杂度;(2)避免代码充分;(3)支持子类化;(4)隐藏顺序;(5)隐藏指针操作;(6)提高可移植性;(7)简化复杂的布尔判断;(8)改善性能 对于过于简单的代码写成子程序的两大理由:1 可以增加程序的可读性 2简单程序可能变成复杂程序 1 在子程序层上设计 内聚性强调把一件事做好,不再做其它任何事情这样做的好处是得到更高的可靠性 顺序上的内聚性是指在子程序内包含有需要按特定顺序执行的操作,这些

代码大全阅读笔记02

继续阅读代码大全这本书,感觉是好厚好难啃啊.刚刚开始读不久到了作者说把主要精力集中于构建活动,可以大大提高程序员的生产率.我想就一个项目来说,思路和设计是站着主导的地位的,你如果不能把思路理清,可能随时都有可能卡在那里,而一旦灵感来了,你就会想泉涌一样的来思路,我们也算是做了一个小的项目的了,虽然很low吧,但是好歹也算有点体会.我们总是在设计的时候会走投无路,不知所措,以至于每一次开始时都是没有思路起手都只能积压在那里,实在是不知道该怎么做.我觉得 P28 的那个食物链的例子更有说服力,健康的

代码大全阅读笔记01

又是一本经典的书<代码大全>,从豆瓣上看到了很多的好评,看了一点感觉大全确实是如其名,一路下来都是很实用的东西,有些虽然都接触到了,但是再看一遍仍旧是收益很大.首先,软件构建的核心就是管理复杂度.虽然书中有不少的篇幅来讨论变量.语句等等这些编程的基本要素,还包括代码改善和调整的策略和方法,可谓不无巨细.不过深入理解一下,这些内容都是围绕着上面这句话展开的,也就是软件构建的核心就是管理复杂度.而这一目标产生的根源就在于人脑智力同软件项目复杂程度之间的矛盾.书中常常会提到几个数字,差不多在6.7左

代码大全阅读笔记03

无论怎么拖也总是要做的,我感觉自己的拖延似乎是毫无意义的浪费时间,我的拖延挤出来的时间都是在干啥,这真是让我反思.好了继续读代码大全,我开始烦了已经,因为它太厚了.过渡工程,这个问题把握好并不容易.一方面,我们希望系统健壮,如果组成系统的各个部分只在最低限度满足健壮性要求,那么整体通常是达不到要求的.软件健壮性不取决于最薄弱的地方,而是等于所有薄弱环节的乘积.构架应该指出每个部分,程序员为了谨慎而宁可做过度工程,还是做出简单的能工作的东西就够了.有些东西是不应该过分花精力的,这个错误我们也犯过,

代码大全阅读笔记(三)

一  使用指针的一般技巧 错误的使用指针,给一个坏了的指针赋值时,会把数据写入本不该写值的内存区域.这称为内存破坏而更正指针错误的大部分工作量是找出它的位置. 正确地使用指针要求程序员采用一种双向策略.第一,要首先避免造成指针错误.指针错误很难发现,因此采取一些预防性措施是值得的,其次,在编写代码后尽快的找出错误来 二 寻找错误的方法 1 把指针操作限制在子程序或者类里面 2 同时声明和定义指针 3 在使用指针之前检查指针 4 先检查指针所引用的变量再使用它 5 用狗牌字段检测损毁的内存(“标记

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

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

代码大全读书笔记 - 开篇

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

代码大全学习笔记(一):第1-3章

1. 本书全面阐述 软件构建活动的方方面面 2. 软件开发过程中的各种活动: (1)   定义问题 (2)   需求分析 (3)   规划构建 (4)   软件架构 (5)   详细设计 (6)   编码与调试 (7)   单元测试 (8)   集成测试 (9)   集成 (10)  系统测试 (11)  保障维护 3. 发现错误的时间要尽可能接近引入该错误的时间 4. 软件开发两种方式: (1)迭代式开发:需求不稳定或理解暂时不透彻,变动较多 (2)序列式开发:需求比较稳定,长期可预测性 5.

清理代码的阅读笔记

深度解析:清理烂代码 2015-10-05 PHP开发者 (点击上方公众号,可快速关注) 英文:Niklas Frykholm 作者:伯乐在线 - 唐小娟 网址:http://blog.jobbole.com/28672/ 猜猜看怎么了!你正”继承“(接收)了一堆混乱的旧代码.恭喜你!现在都是你的了.混乱的代码可能来自任何地方.中间件,网络,可能来自你自己的公司. 你知道在一个角落里有一个家伙,没有人过去管他在做什么.猜猜看他一直在做什么?辛辛苦苦写出了代码,却是一堆烂代码. 你还记得这个模块是

《梦断代码》阅读笔记一:第0章到第2章

“本书是讲一事,也是讲百千事:是写一软件,也是写百千软件:是写一群人,也是写百千人.任何一个在软件领域稍有经验的技术人员看完本书,必掩卷长叹:做软件真难.”卷首的这段话着实把握给唬住了,这本书一定和我以前看的专业类的书籍不一样(ps:特别讨厌<20天XXX从菜鸟到大师>.<15零基础学会XXX>).翻到目录果然是和我以前看的专业类的书有着天壤之别,光看目录就有立刻阅读的冲动.像第一章的“死定了”,第四章的”乐高王国“,第五章的”管束奇客和狗“,这样的题目很难想像会出在与软件工程有关