int elapsedTimeInDays;
int daysSinceCreation;
int daysSinceModification;
int fileAgeInDays;
int parseCustomerIdFromFile();
Dirty
这些代码想表达什么含义?
模糊度:上下文在代码中未能被明确体现的程度
public List <int[]> getThem() {
List <int[]> list1 = new ArrayList <int[]>();
for (int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}
Clean
public List <int[]> getFlaggedCells() {
List <int[]> flaggedCells = new ArrayList <int[]>();
for (int[] cell : gameBoard)
if (cell[STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return flaggedCells;
}
class DtaRcrd102 {
private Date genymdhms; // generationdate, year, month, day, hour,
//minute,and second (you can notread this)
private Date modymdhms;
private final String pszqint = "102";
}
Clean
class Customer {
private Date generationTimestamp;
private Date modificationTimestamp;
private final String recordId = "102";
}
添加有意义的上下文(Add Meaningful Context)
在命名变量时,如果这些变量有相关性,可以给这些变量加上前缀
Dirty
firstName
lastName
street
houseNumber
city
state
zipcode
命名
好的命名是要能直接体现出意图,表达具体的业务含义,不需要通过补充注释来说明命名的含义,能让人更容易理解和修改代码;名字是自描述的,不需要额外的注释来说明 我们在命名时需要想想团队的新成员是否能理解这个名字的含义?
这些内容看起来确实简单,但实施起来并非易事,因为需要知道哪些地方有问题以及如何正确使用
命名范围
变量名、方法名、参数名、类名、包名、文件名
命名规则
使用能够表达含义的名字(Use Intention Revealing Names)
Dirty
Clean
这些名称更能让人容易理解
Dirty
这些代码想表达什么含义? 模糊度:上下文在代码中未能被明确体现的程度
Clean
给变量名带上重要的细节
Dirty
Clean
时间相关
java.util.concurrent.TimeUnit
魔法数字(Magic Numbers)
Dirty
Clean
More clean
避免误导(Disinformation)
Dirty
Clean
做有意义的区分(Make Meaningful Distinctions)
Dirty
a1,a2能体现出什么业务含义?
Clean
http://www.slideshare.net/CleanestCode/naming-standards-clean-code
使用读得出来的名字(Use Pronounceable Names)
Dirty
Clean
添加有意义的上下文(Add Meaningful Context)
在命名变量时,如果这些变量有相关性,可以给这些变量加上前缀
Dirty
Clean
Class Names
类名应该是名词或者名词短语
Dirty
Clean
Method Names
方法名应该是动词或者动词短语
Dirty
Clean
TODO
Use Searchable Names
Dirty
Clean
Avoid Encodings
Dirty
Clean
Avoid Mental Mapping
Dirty
Clean
Don’t be Cute
Dirty
Clean
One Word per Concept
Dirty
Clean
No Puns
Dirty
Clean
Solution Domain Names
Dirty
Clean
Problem Domain Names
Dirty
Clean