《The Art of Readable Code》 读书笔记 03

Reorganizing your code

        02中主要探讨如何局部优化代码,即将循环和逻辑结构优化,减少代码的嵌套。

        这章中,将从更大的层次——函数,进行代码的重组,使代码更加易懂。主要从三个方面探讨:

  1. 抽取与函数主旨无关的子问题。
  2. 重组代码使其一次只专心做一件事。(应该类似设计模式的单件吧,烧好一壶水就行)
  3. 现在词法层次描述代码,描述将帮助引导向一个更明了的解决方案。

         最后,将讨论下可以删除全部代码和避免摆在首位写。(FIXME: 翻译不地道!)


        Extracting Unrelated Subproblems

      Advice: 积极识别抽取无关的子问题,意味着:

  1. 问自己,该函数/代码块的高层目标是什么
  2. 审问每一行代码是否和目标直接相关,或者是否在解决一个需要被满足的无关子问题。
  3. 提取解决无关子问题的行,并将其写成一个独立的函数。

      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

     上述的宏,就是一个和主要问题无关的子问题(实现跟踪)。

posted @ 2013-04-13 15:42  xield  阅读(164)  评论(0编辑  收藏  举报