博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
《代码大全》阅读笔记-13-不常见的数据类型
阅读量:6855 次
发布时间:2019-06-26

本文共 1165 字,大约阅读时间需要 3 分钟。

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

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

访问器子程序的优势

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

如何使用访问器子程序:

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

降低全局数据的风险:

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

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

结构体

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

全局数据

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

指针

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

要点

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

转载于:https://www.cnblogs.com/taceywong/p/8719316.html

你可能感兴趣的文章
【4opencv】求解向量和轮廓的交点
查看>>
一次邮件发送协议SMTP问题排查
查看>>
Confluence 6 数据库表-系统信息(System information)
查看>>
BugkuCTF 文件上传测试
查看>>
leaflet加载视频图层
查看>>
统治世界的十大算法
查看>>
安装工具
查看>>
关于C#中Partial局部类型关键字的使用
查看>>
Python学习记录(某些特性)
查看>>
【一课专栏】解构ODL引子 - ODL入坑之路·上篇
查看>>
接任马云:创造者张勇和他所改变的阿里巴巴
查看>>
快速上手wepy,制作简易签名板
查看>>
服务器报错-初始化检测硬盘异常
查看>>
PAT甲级题解目录 [会逐步更新完整]
查看>>
携程Java实习二面
查看>>
网络编程中重要的几个数据结构和函数
查看>>
7- OpenCV+TensorFlow 入门人工智能图像处理-彩色反转&边缘检测
查看>>
不同地域的内容偏好性分析
查看>>
JPA @Column 字段命名 默认驼峰转换
查看>>
作者谈《阿里巴巴Java开发手册(规约)》背后的故事
查看>>