为透明性和可显性而编码——UNIX编程艺术学习笔记

透明性和可显性同模块性一样,主要是设计的特性而不是代码的特性:

1、 程序调用层次中最大的静态深度是多少?不考虑递归,为了建立心理模型来理解代码的操作,人们将要调用多少层?这个应该不是实际的代码调用层次。我现在倾向于小函数,所以调用层次会比较深。它这个应该是理解上的层次。

2、 代码是否具有明显,强大的不变性质?不变性质指软件设计中各个操作都保持不变的特性。比如字符串函数退出时,每个字符串必须有一个字符串结尾符。

3、 每个API中各个函数的调用是否正交?或者是否存在太多的特征标志和模式位,使得一个调用要完成多个任务?所谓的模式标志linux函数有很多这样的例子。完全避免模式标志会导致API包含太多几乎一模一样的函数;当频繁使用模式标志更容易参数错误。

4、 是否存在一些顺手可用的关键数据结构或全局唯一的记录器,捕获了系统的高级状态?这个状态是否容易被形象化和检验,还是分布在各个全局变量中,而难以找到?应该是程序的设计要有一个主线,按照这个主线可以从宏观上掌握整个程序。

5、 程序的数据结构或分类和它们所代表的外部实体之间,是否存在清晰的一一对应关系?

6、 是否容易找到给定函数的代码部分?不仅单个模块,函数,还有这个代码,需要花多少精力才能读懂?

7、 代码增加了特殊情况还是避免了特殊情况?特殊情况间可能会有影响,而且,这是滋生bug的温床。更重要的是,它是代码难于理解。

8、 是否有魔鬼数字。


可以结合模块化编码——unix编程艺术学习笔记学习,更加具有启发性。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值