十月第二份阅读笔记
程序员修炼之道从小工到专家第四章 注重实效的偏执
你不可能写出完美的软件
按合约设计:通过合约进行设计。
对在开始之前接受的东西要严格,而允诺返回的东西要尽可能少。
实现DBC:
没有合约,你就是靠巧合编程了。自动检查。
文档记载,注释。
断言:使用断言,对此进行部分的模拟,提前崩溃,可以知道问题出在哪里。
不变项的其他用法:循环不变项,边界问题,语义不变项, 固定的需求、不可违法的法则与那些仅仅是政策的东西不同。
动态合约与代理:合约不是固定的,可以通过组件和代理来实现某个目标。
死程序不说谎:如果发生了不可能的事情,就让你的程序崩溃/终止。死程序可以坏程序要好。
断言式编程:如果它不可能发生,用断言确保它不会发生。不要自己欺骗自己。
何时使用异常:如果不停的if,else来避开异常。只要在开头结尾处写try catch就好了。可以将错误收集并处理,而且控制流也会清晰很多。
怎样配平资源
要有始有终,不要被全局变量把程序耦合在一起。放到参数里传递。局部变量。
嵌套的分配:
与分配次序相反,进行释放。
在代码不同位置进行申请时,总是保持同一个顺序,防止死锁。
对象与异常:
构造和析构,使得把资源封装在类中很方便。
配平与异常:在Java,使用finally
当你无法配平资源时:追踪资源,如何释放。More Effective C++会讲这个。
检查配平:长期运行的、对请求进行服务的程序,很可能会回到主循环的顶部的某个地方等待下一个请求。