《The Art of Readable Code》 读书笔记 03
Reorganizing your code
02中主要探讨如何局部优化代码,即将循环和逻辑结构优化,减少代码的嵌套。
这章中,将从更大的层次——函数,进行代码的重组,使代码更加易懂。主要从三个方面探讨:
- 抽取与函数主旨无关的子问题。
- 重组代码使其一次只专心做一件事。(应该类似设计模式的单件吧,烧好一壶水就行)
- 现在词法层次描述代码,描述将帮助引导向一个更明了的解决方案。
最后,将讨论下可以删除全部代码和避免摆在首位写。(FIXME: 翻译不地道!)
Extracting Unrelated Subproblems
Advice: 积极识别抽取无关的子问题,意味着:
- 问自己,该函数/代码块的高层目标是什么
- 审问每一行代码是否和目标直接相关,或者是否在解决一个需要被满足的无关子问题。
- 提取解决无关子问题的行,并将其写成一个独立的函数。
e.g: 冒泡排序需要一个swap函数,这里排序是高层目标,swap是一个无关子问题。这个无关子问题能够复用。
为啥c/c++难?我觉得就是它的库太少了。它只为程序员提供了低层的函数接口,许多高层功能需要程序员自己编写。因此,学习STL/BOOST就很有必要。同时,作为一个c/c++程序员,应注意平时搜集实用代码段(主要靠平时自己写),建立起“自己的库”。
调试时编写一些宏/函数来debug是每个程序员常常做的。我比较常用的是追踪编译出错的位置。(代码经常可能编译通过,但是运行错误,就需要用二分法trace出错的位置)。我的做法是:
#ifndef TRACE_ME #define TRACE_ME #include <iostream> #define TRACE (std::cout << "Excute in " << __FILE__ << " line: " << __LINE << std::endl; ) #endif
上述的宏,就是一个和主要问题无关的子问题(实现跟踪)。
路漫漫其修远兮,吾将上下而求索