c*****t 发帖数: 1879 | 1 读代码是每个程序员都必须做的事。因为我们经常会在几个月以后
重新回到自己的源码进行修改或者使用,或者使用同事和 library
的程序。快速的理解代码是一个很重要的技能。
另外,写程序的一个重要指标就是易读易懂,容易维护。而这个指
标的根本原理就是能够速读。所以,理解速读的原理和方法,是提
高编程能力的途径。
这里介绍的就是提高速读的方法。速度读的和编程一样,有不同的
层次。高层的,是 module interface / API。中间的是 method 等,
底层的这是某 function 内部的具体实施。
对于 API 层次,常用的就是 MvC,DIP/IoC 等 pattern 。这种情
况下关键就是注意命名。比如 xxxManager, xxxView, xxxControler,
xxxImpl,xxxxFactory, Ixxx,xxxWrapper,xxxBridge,xxxAdapter
等。这样,不需要读代码,就可以理解大概的功能。同样写程序的
时候,也使用类似的命名能够帮助迅速的理解代码。熟悉不同的 pattern
是迅速理解 API 的途径。
对于 method, |
g*****g 发帖数: 34805 | 2 很有见地,不过m_var 这样的命名方式是MFC风格的,
java里面不推荐。另外
if(..) {
}
这是Sun推荐的Java编程风格,我个人觉得很好,可以省下大量
的空行。对于编程风格问题,最好的办法是整个team用同一个
编辑器,同一个格式化模板,自动的commit前格式化。
【在 c*****t 的大作中提到】 : 读代码是每个程序员都必须做的事。因为我们经常会在几个月以后 : 重新回到自己的源码进行修改或者使用,或者使用同事和 library : 的程序。快速的理解代码是一个很重要的技能。 : 另外,写程序的一个重要指标就是易读易懂,容易维护。而这个指 : 标的根本原理就是能够速读。所以,理解速读的原理和方法,是提 : 高编程能力的途径。 : 这里介绍的就是提高速读的方法。速度读的和编程一样,有不同的 : 层次。高层的,是 module interface / API。中间的是 method 等, : 底层的这是某 function 内部的具体实施。 : 对于 API 层次,常用的就是 MvC,DIP/IoC 等 pattern 。这种情
|
c*****t 发帖数: 1879 | 3 SGI STL 里大量使用 _M_。至于 Sun,它自己 JDK 里面的 code 就很糟糕。
没有固定的 naming convension,乱七八糟的 indentation,scope (private
vs default 等)。有些地方使用 v_, _v, 等。我不喜欢 _ 因为 C 里面 _
和 __ 属于 system function 。最好不要养成习惯使用 _。
我觉得使用 prefix/suffix 比较好。Eclipse/IDE 对此有特殊支持,可见
还是比较重要的。
至于
if (..) {
}
很多人喜欢这种风格,俺就是不喜欢 hehe :)
【在 g*****g 的大作中提到】 : 很有见地,不过m_var 这样的命名方式是MFC风格的, : java里面不推荐。另外 : if(..) { : } : 这是Sun推荐的Java编程风格,我个人觉得很好,可以省下大量 : 的空行。对于编程风格问题,最好的办法是整个team用同一个 : 编辑器,同一个格式化模板,自动的commit前格式化。
|
g*****g 发帖数: 34805 | 4 SGI, STL还是C/C++,用在Java上不合适,JDK的代码我读的不多,
但像Spring的code就写得很好,你可以看看。至于indention,我说了,
必须用formatter,否则不可能一致的。除了static final,不推荐用
_在任何变量上,比如gameList这样一个变量很干净,game_list就很C。
声明变量的时候经常直接就如
GameList gameList = new GameList();
都不用脑,不用多想名字,也很清楚。
【在 c*****t 的大作中提到】 : SGI STL 里大量使用 _M_。至于 Sun,它自己 JDK 里面的 code 就很糟糕。 : 没有固定的 naming convension,乱七八糟的 indentation,scope (private : vs default 等)。有些地方使用 v_, _v, 等。我不喜欢 _ 因为 C 里面 _ : 和 __ 属于 system function 。最好不要养成习惯使用 _。 : 我觉得使用 prefix/suffix 比较好。Eclipse/IDE 对此有特殊支持,可见 : 还是比较重要的。 : 至于 : if (..) { : } : 很多人喜欢这种风格,俺就是不喜欢 hehe :)
|
c*****t 发帖数: 1879 | 5 我不在争 class/function name。我在说 instance variable name
需要 prefix/suffix。我一般用 m_。这对查找很方便,而且不容易
出
setAbc (int abc)
{
abc = abc;
}
的错误。我以前不是提到某人的程序里 N 多类似的问题么,俺最后
没办法自己写个。而且 m_ 比 this. 简单多了 :) 这对 reflection
也有好处。如果你用 script,那么 abc = "100" 是 call function
还是直接上 variable?你可以争议 abc 是 private,setAbc 是
public。实际上,很多 script 直接 call setAccess(true),因为
这样可以 optimize reflection call,所以直接 private/public
并没有太大意义。有些程序特意直接让 script 读写 private variable,
(比如 Xml Parser),而 Java 里只看到 p
【在 g*****g 的大作中提到】 : SGI, STL还是C/C++,用在Java上不合适,JDK的代码我读的不多, : 但像Spring的code就写得很好,你可以看看。至于indention,我说了, : 必须用formatter,否则不可能一致的。除了static final,不推荐用 : _在任何变量上,比如gameList这样一个变量很干净,game_list就很C。 : 声明变量的时候经常直接就如 : GameList gameList = new GameList(); : 都不用脑,不用多想名字,也很清楚。
|
g*****g 发帖数: 34805 | 6 Eclipse有这个warning, 打开就是了。
m_是比this.简单,但是在IDE里打起来反而慢。
何况this只在setter里用用就行了。
【在 c*****t 的大作中提到】 : 我不在争 class/function name。我在说 instance variable name : 需要 prefix/suffix。我一般用 m_。这对查找很方便,而且不容易 : 出 : setAbc (int abc) : { : abc = abc; : } : 的错误。我以前不是提到某人的程序里 N 多类似的问题么,俺最后 : 没办法自己写个。而且 m_ 比 this. 简单多了 :) 这对 reflection : 也有好处。如果你用 script,那么 abc = "100" 是 call function
|
c*****t 发帖数: 1879 | 7 其实争这个没必要了。以前(Eclipse 3.1 以前),Eclipse 没有这种
highlight,所以看 code 没 prefix/suffix 很费劲。现在有 highlight
instance variable 就不是太大问题。
当初用 NetBeans 2.0 的时候(没 refactor),我处理某同事的 code,
那个叫累。不单他采用 a, b, 等 instance variable,而且 declaration
是在 class 中间(不是开头也不是结尾),那个差点没气死。好在他离
开了,再改下去要疯掉。另外那个出现 abc = abc 的问题也挺讨厌。问题
是写这程序的家伙的东西出现 1w 多 warning 。
至于其它语言,如果没有合适的 highlighter,prefix/suffix 还是
相当重要的。
【在 g*****g 的大作中提到】 : Eclipse有这个warning, 打开就是了。 : m_是比this.简单,但是在IDE里打起来反而慢。 : 何况this只在setter里用用就行了。
|