1.关于如何读懂别人的何读代码以及如何提高代码可读
2.如何快速读懂项目源码javaWeb
关于如何读懂别人的代码以及如何提高代码可读
1. 什么叫读懂代码
当然,读懂代码的懂源读懂语法是基本,但更重要的码何是读懂代码的意义。
读代码的源码时候,我们更多思考这个问题:这行代码在做什么,文件为什么要这么做。何读lvds转edp源码然而实际上,懂源读懂我们仍然会碰到很多不明觉厉的码何代码。先看如下示例:
复制代码
int fn(int a,源码 int b){
int sum = 0;
for(int i = a; i < b; i++){
sum += fn(i - 1, i + 1);
}
return sum;
}
复制代码
从语法上,代码是文件非常简单的几行。但是何读我们无法得出它的意义。因为:
代码是懂源读懂在描述具体的执行步骤,而不是码何游戏源码插件描述功能本身。
这就是源码为什么大部分代码难读的主要原因。作者将它的文件意图描述成具体的步骤,而读者又需要根据步骤理解意图,这是一个多么吃力的过程。所以,如果想要提高代码可读性,你应该将你的意图写入代码中:即使用注释来描述代码的意图。当然,作者没有那么多时间留注释,所以,更多时候需要尝试自己尝试理解代码。2. 成员的运营盒子源码嵌套
先看如下代码:
void fn(){
int a = f1();
int b = f2(a);
int c = f3(b);
int d = f4(a, b);
}
如果你想理解 fn(),那么就必须先理解 f1() f2() f3() f4() 。这就是残酷的现实。
代码中总是互相引用和嵌套。
所以,你需要在最后关头才能真正读懂它,并且不允许任何一部出现差错。然而实际上,读懂这样的代码是不可能的。
比如下面的代码:
复制代码
void fn(){
int value;
if(this.header == null) {
value = this.header;
} else {
value = this.main;
}
}
复制代码
这个代码让我抓狂:虽然我知道这个函数的目标是获取 header 的值,如果获取不到则使用 main 的值。但同时还有这些问题:
header的值是什么?main的值是什么?什么时候可以获取到header的值,而什么时候又获取不到?
如此读懂一行代码带来3个问题,在尝试解决这3个问题时又带来更多问题。棋牌源码建设这是导致代码最终很难读懂的重要原因。
3. 代码的歧义
有时候,一些语法现象也会造成理解代码的错误,如:
复制代码
function fn(){
}
function gn(){
fn();
// 这里是很长很长的代码。
function fn(){
}
}
复制代码
是的,你需要读到最后才知道, fn(); 调用的是下面那个函数,而不是之前的。
4. 运行时判断
真的有很多代码,必须在运行时才能知道它的实际操作。虚函数和动态类型就是一个典型例子。
这也是springboot注解源码为什么弱类型的脚本语言的代码都普遍比较难理解的原因,有太多东西需要在运行时才知道。
而读者只能一个个猜测它的意图。
5. 代码的丢失
对的,很多时候,特别是读别人的代码,你根本找不到一个效果和功能它的源码在什么地方。
也许,代码隐藏在一个小角落,或者根本就不存在,或者是自动生成出来的。
这是为什么C++项目难读的一个重要原因:因为有太多的自动生成的代码(通过#define) 。
如何快速读懂项目源码javaWeb
一:学会如何读一个JavaWeb项目源代码 步骤:表结构->web.xml->mvc->db->spring
ioc->log-> 代码
1、先了解项目数据库的表结构,这个方面是最容易忘记 的,有时候我们只顾着看每一个方法是怎么进行的,却没
有去了解数据库之间的主外键关联。其实如果先了解数据 库表结构,再去看一个方法的实现会更加容易。
2、然后需要过一遍web.xml,知道项目中用到了什么拦
截器,监听器,过滤器,拥有哪些配置文件。如果是拦截 器,一般负责过滤请求,进行AOP 等;如果是监 可能是定时任务,初始化任务;配置文件有如使用了 spring
后的读取mvc 相关,db 相关,service 相关,aop 相关的文件。
3、查看拦截器,监听器代码,知道拦截了什么请求,这
个类完成了怎样的工作。有的人就是因为缺少了这一步, 自己写了一个action,配置文件也没有写错,但是却怎么
调试也无法进入这个action,直到别人告诉他,请求被拦
4、接下来,看配置文件,首先一定是mvc相关的,如 springmvc
中,要请求哪些请求是静态资源,使用了哪些 view 策略,controller 注解放在哪个包下等。 然后是db 相关配置文件,看使用了什么数据库,使用了
什么orm框架,是否开启了二级缓存,使用哪种产品作 为二级缓存,事务管理的处理,需要扫描的实体类放在什 么位置。最后是spring 核心的ioc
功能相关的配置文件, 知道接口与具体类的注入大致是怎样的。当然还有一些如 apectj 置文件,也是在这个步骤中完成
5、log
相关文件,日志的各个级别是如何处理的,在哪些 地方使用了log 记录日志
6、从上面几点后知道了整个开源项目的整体框架,阅读 每个方法就不再那么难了。
7、当然如果有项目配套的开发文档也是要阅读的。