Java程序员十戒-1
上一篇 / 下一篇 2012-04-20 09:51:07 / 个人分类:Java
1、为代码添加注释(Add comments to your code)。– 每个人都知道这一点,但不是每个人都会这么做。你有多少次“忘记”添加注释了?确实,注释不会为你的程序增加任何函数功能。但是,有多少次,看到2周前写的代码,你都记不起它是干什么的?你很幸运,那些未注释的代码是你自己写的,你脑海中还会有残存的印象。非常不幸,大多时候,代码是别人写的,并且那个人很可能已经离开公司了。有句谚语说的好:“有来有往,互惠互利”,因此程序员应该体谅彼此(还有你自己),给你的代码加上注释。
dn#N%k*c0~L.xP?nK u0 2、不要把简单事情复杂化(Do not complicate things)。– 我曾经这么做过,我相信你也一样。开发者都倾向于采用复杂方式解决简单问题。我们在一个只有5个用户的系统中引入EJB,为一个并不需要框架的应用实现一套框架,采用属性文件、采用面向对象解决方案、使用线程,而这些根本用不着。为什么会这么做?一些人可能不知道有更好的解决方案,但另一些人可能故意这样做来学习新知识,或仅仅是因为有趣。对那些不知道更好解决方案的人,要多听有经验程序员的建议。对于那些纯粹出于个人目的而将设计复杂化的人,我建议你要更加专业一点。51Testing软件测试网@d\bN9SVF
4A?;Jy,Vp(}-smC*_'g0 3、记住 - “越少越好”并非总是如此(Keep in Mind – "Less is more" is not always better)。– 高效率的代码是件好事,但很多情况下,并非代码行数越少效率就越高。看下面这个“简单”的例子:
2KF$P] D-e8W051Testing软件测试网;w!x$V;g0}6f#HTT\T!N2q^'G0if(newStatusCode.equals("SD") && (sellOffDate == null ||51Testing软件测试网kA$d6a6djh#a todayDate.compareTo(sellOffDate)<0 ||51Testing软件测试网rc j-wU(w]7Q (lastUsedDate != null && todayDate.compareTo(lastUsedDate)>0)) KT0p%Q"WT}0||(newStatusCode.equals("OBS") && (OBSDate == null ||51Testing软件测试网(F\X0YC _1]p todayDate.compareTo(OBSDate)<0))){ c/R H2rO$_R0 newStatusCode = "NYP"; gj%C8^/PB)p:Dr0} |
N,c4T M:dT(D7T$Y ~051Testing软件测试网dw Y-?6u3b1Ud%j
-o\+D _ JD'z0a0 指出这个if条件是什么有多困难?再设想一下,写这段代码的人并没遵循第1条 - 为代码添加注释。
5PmHNv&Mk0#}g hU*o0 把if条件分解成2个if语句不是更容易理解吗?现在让我们看一下修改过的代码:
[ d1Z"k*PY+U&DP7a02k;`? M3[F[051Testing软件测试网4S3O+GKy(o
1 if(newStatusCode.equals("SD") && (sellOffDate == null ||51Testing软件测试网f9l/f-P9g#Y
l 2 todayDate.compareTo(sellOffDate)<0 || (lastUsedDate != null &&51Testing软件测试网A1o)s]-f/Cc"L9\%gZ 3 todayDate.compareTo(lastUsedDate)>0))){51Testing软件测试网'qH3yuz4Su+d 4 newStatusCode = "NYP"; *r r TRX*L2p Z4]2oLa05 }else L5~G{e7o06 if(newStatusCode.equals("OBS") && (OBSDate == null || +x*t_:m|1G-z6C07 todayDate.compareTo(OBSDate)<0)) 8Pe6b#l!K)YO08 { 5`l4ZT;rnRC09 newStatusCode = "NYP"; #k |?x7[p4i~D010 } |
51Testing软件测试网#q,z'kpUl5F[9~
51Testing软件测试网)Mid}!V \%NP这样可读性不是更好吗?的确,我们写了重复语句;的确,我们多写了一个if和2个大括号;但是代码确实更加易读、更加容易理解了!51Testing软件测试网FQ?-rbRo"C8h
51Testing软件测试网P"Cu%Evt a4、不要“硬编码"(No hard coding please)。– 由于时间紧迫,开发者总是会忘记或故意忽略这一条。然而另一种可能是,遵循这条戒律,我们就不会陷入“时间紧迫”的困境。定义一个static final 变量,增加一行代码,又能花多长时间呢?譬如:
yJ#t1Wm8z {^051Testing软件测试网|s+n8h.U*@"I2_ y q01 public class A {51Testing软件测试网*t7E8vt s[ 251Testing软件测试网NxG5W$e VWE7AO 3 public static final String S_CONSTANT_ABC = "ABC";51Testing软件测试网\*c%~+i9IT 4 3eE r%k:Y+@1M{X9b05 public boolean methodA(String sParam1){ 9M-nk Au9F x06 wo[9v{T07 if (A.S_CONSTANT_ABC.equalsIgnoreCase(sParam1)){51Testing软件测试网|5Bs4gtc i'u 8 return true;51Testing软件测试网5G-gt8p;_MS/I 9 }51Testing软件测试网@IG%[\R,W%Y 10 return false; |