如何阅读别人的代码(转自coney)
来源:互联网 发布:java短信发送验证代码 编辑:程序博客网 时间:2024/05/16 13:13
原文网址:http://gengbiao.me/technique/如何阅读别人的代码/#
第一次写博客,所以就先从转载别人的文章开始,然后加一点自己的感受。
如何阅读别人的代码
首先要能运行起来
本人一般都是先想办法让代码运行起来,只有这样,当我对代码做更改的时候,才能通过程序的变化直观的看到我更改的这部分代码究竟是负责哪一部分的。
个人经验表示,github上只要是靠谱点的开源项目都会在README里面写上如何部署的。我一般发现README写的不太好的,都是先去找找别的,实在找不到了才会回来看这个。
个人观点:README也有些比较难懂,有点写的很随意,基本不可能部署出来,这时候就可以选择放弃
比如碰到某个输出函数你不知道到底执行在哪个部分,可以直接改掉里面的输出,再运行程序,发现你设置的输出在哪里粗线了(就是这就是这~),就找到了这句话的执行区间了。
比如你还可以注释掉一些代码,看看程序有什么反应,是崩溃了还是哪些地方消失了。如果你注释掉一部分代码,发现程序数据不更新了,那就可以判断出这部分代码是跟数据更新有关的,如果程序崩溃了,那看看在哪down掉了,那你注释的那部分代码就在这个地方被使用了。等等。
要有一个全局搜索的工具
我一般用的是sublime,感觉蛮好用的。它的作用是只要你有一丝线索,就可以迅速定位到你想要的地方。你自己还可以折腾下安装sublime的tag插件,就可以很方便的从函数调用的地方跳到函数定义的地方。
这个方法还是满通用的。
比如android,我clone下来一个网络异步的库volley,但是我觉得他这个库对json支持的达不到我的要求。我想自己更改,那第一步肯定是用sublime打开源码,搜索Json。就可以把范围缩小到局部了。
比如node.js,我想研究下hexo的git push,那我直接用sublime打开源码,搜索git就可以直接把范围缩小很多了。
比如前端我用到了DataTable,但是我觉得他的排序不满足我的需求。那我可以直接用“sort”关键词搜索他的源代码,定位出排序算法,接下来就可以慢慢改了。不然2W多行的源代码,岂不是疯了-_-!
再进一步,可能我不太清楚某个函数的用法与用处,我直接用sublime搜索这个函数名,所有调用到这个函数的代码就在我眼前了,接下来我就可以研究这个函数到底在程序中如何使用了。
笔记:我现在用的是notapad++,这个也有全局搜索的功能,还有许多插件。推荐使用。
学会注释与修改
这个其实就是第一步说的。程序跑不起来很多东西都不能确定,你甚至不知道是对是错。
多用搜索引擎与官网文档
其实不光是github开源代码,读别人的代码都需要多用搜索。因为很多时候如果源代码的注释不到位,你读起来是很费劲的。这个时候搜索引擎就很重要了。
比如我前一阵尝试iOS的时候,第一次看到block这个东西,根本就不懂这是什么代码怎么能读明白,于是直接粘到谷歌里看了。
比如有时候别人对代码做封装了,你看到的函数根本就不是原生的,但是你刚读可能不知道,完了你又看不太懂,这个时候你可以直接去搜谷歌或者developer center,比如我前一阵看别人源码看到了这个:
[self performDelay:0.5 block:^{}];
谷歌后发现丫根本找不到这个函数是啥。那请不要慌,多半是因为这个函数根本就是项目作者自己封装的。(有iOS大神可能会文你为毛不command直接进去看,求大神们不喷,我就是举个例子。)
新手不建议直接通读源码
本人作为一个开发没多久的程序猿,水平一般,所以读开源项目的时候很多代码根本通读不能,所以我一般都是用上面的这些方法,从功能入手,一点点研究,慢慢吃透整个项目。
- 如何阅读别人的代码(转自coney)
- 如何阅读别人的代码(转)
- 如何阅读别人的代码(转)
- 如何阅读别人的代码(转)
- 如何阅读别人的代码(转)
- 如何阅读别人的代码(转)
- 如何阅读别人的代码(转)
- 如何阅读别人的代码(转)
- 如何阅读别人的代码(转)
- 如何阅读别人的代码(转)
- 如何阅读别人的代码[转]
- 如何阅读别人的代码
- 如何阅读别人的代码
- 如何阅读别人的代码
- 如何阅读别人的代码
- 如何阅读别人的代码
- 如何阅读别人的代码
- 如何阅读别人的代码
- 理解Python的With as语句
- 谷哥的小弟学前端(09)——CSS基础知识(7)
- 三星加强安全性保障未来产品安全
- java判断文件是否是一个lnk快捷方式
- HDU-1839-二分下限+spfa
- 如何阅读别人的代码(转自coney)
- Python脚本结合UiAutomator自动化采集Activity的FPS
- NYOJ457 - 大小写互换
- 【t083】买票
- 通过native sql来获取多个表的杂交类
- 路由器Lan、Wan短接问题
- 线性规划与网络流24——运输问题
- sqlserver插入当前电脑时间
- 三星召开发布会 公布Note 7燃损事件的根源