当前位置:C++技术网 > 资讯 > 看开源库的代码该注意哪些地方?

看开源库的代码该注意哪些地方?

更新时间:2017-05-15 14:16:46浏览次数:1+次

先找一个开源库来学习,但是代码下下来以后,然后就不知道该看哪些了?是不是开源库就是要把里面的每个函数,每个变量的作用都要搞明白呢?还是需要注意其他的地方。

C++技术网会员解答:

    您好,感谢您对C++技术网的支持。

    这个问题比较泛,就提供一点通用的代码阅读技巧,仅供参考。

    不管是开源库、还是商业项目还是公司项目,都是差不多的。我们在阅读他人的项目代码时都面临这这类问题。

    就和每一个程序都有一个入口函数一样,每一个项目都是有入口点的。每一本书都有一个目录,我们有一个词语叫做提纲挈领。在阅读书籍也好,还是阅读资料也好,最先应该读的是提纲类的说明。所以读书的话,就是看目录和简介等等。

    对于项目类的代码,如第三方库、或者标准库都是有文档的。在拿到代码时,不要慌忙去看代码。我们要采用从上到下的方式来阅读项目。大概分下面几个步骤:

1.阅读提纲性资料

    提纲性资料可以让我们从整体上对项目情况有全面的了解,知道项目能做什么,不能做什么,使用了什么技术,依赖什么技术,使用条件是什么,使用的环境是什么,项目开发出来的环境背景、现在的维护情况等等。这些信息可以让我们对项目整个都有一个清晰的认识,不至于用了很久才发现有致命的问题,因为不适合某个应用场景。再回头就有点迟了。

    还有一点,对于复杂一点的项目,经常蕴含这一些思想,比如低内聚高耦合,比如回调机制等等。事先了解到这些基本思想之后,在后续深入学习时,可以把握好大方向,知道为什么要设计成这样,原因在于思想的基调都是这样的。很多时候不是只有一种实现,但是就是为了统一风格,就那样做了。你不清楚背景,就理解不了。

2.阅读结构设计性资料

    有了前面的整体的印象之后,需要具体去阅读代码,以求深入了解。然而对于复杂的代码,你可能还是无法下手。此时需要去阅读项目代码结构性设计的资料,如果官方有,看官方的,如果没有,可以看网上一些大神对代码的结构的分析。

    如果项目比较新或者比较冷门,网上没有什么资料,那么在没有资料的情况下(很多公司的项目都没有文档资料),这也很正常。此时如何阅读代码结构设计呢?靠自己!

    这就是从整体上来阅读项目了。先不要细究与某块代码,将整个项目拿来分析,按照功能模块来分类,然后将模块之间的关系理清楚。然后将一些隐含的机制,如消息机制,都要理清出来。最后可以自己慢慢构建出一个完整的结构性设计文档。

    这一步骤不要看具体的函数内的代码。在把握总体流程的层次看就行了。在一个读取配置的函数里,你只要知道这个函数是读取配置的就行了,具体如何读取,就暂时跳过。这样可以加速对整体框架的熟悉,避免细节干扰整体的设计认知。

    另外,非常基础又重要的一点,就是,将主线找出来。即入口函数到运行的整个流程。不管是程序还是库,都会整体的运行流程的。可执行程序有入口主线程、库则会有加载、运行和卸载等。这个主线将各个模块串接在一起,形成一个完整的程序和库。

    这一步能够把握到位,项目基本上很熟悉了。一般看能不能掌握项目,难就难在这一步。很多人根本不知道如何看项目,上来就陷入了各个局部的具体的代码实现里了,整了几个月还是对项目不清不楚的。这也是提纲挈领的重要性。真正掌握就是要整体上能够很熟悉。

3.阅读具体模块说明资料

    当需要进行局部功能新增和修改或者解决问题的时候,就需要深入到具体的模块里面了。这也是进一步深入学习项目的一步。我们要对模块的运行情况进行深入摸底。方法也是先整体把握模块的组成和流程。因为模块可以作为一个完整的实体,也可以再细分。所以也是应该从上到下的方式来解读。这样也可以高效的熟悉模块的情况。

    如果能够对每一个模块做到了如指掌,那么这个项目已经了解了98%了。剩余的2%就是具体的代码实现了。

4.看具体的代码实现

    最后一步才是看具体的代码实现。我们要对代码进行维护,就要看每一句代码,非常直观具体。然而大多数人都是直接从具体的每一行代码看项目。当然,假如你将项目每一句代码都熟悉了,自然项目也能够熟悉,但是效果还是不够好。一是记忆负担大,二是项目庞大之后,很容易被绕晕。三是效率极低,时间太长。

    这一步在需要写代码时才会重点关注。当然,如果是学习,也是重点关注的。你可以学习人家代码的规范写法,人家代码的用法等等。


    方法很重要,方法可以决定人与人之间的差距。合适的方法可以事半功倍。不管在做什么事情,时刻要有高效的概念,当你发现你的方法用了一段时间后,效果不满意,就要注意方法了。是否你的方法还不够好,是否需要改进。在踏实学习的基础上,选择更好的方法可以节省大量的时间,从而可以学习更多的东西,更多的提高自己的能力。