编写代码时,尽量使用有意义的名称命名类、方法、变量等
1.使用能揭示意图的名称
public List<int[]> getThem() {
List<int[]> list1 = new ArrayList<int[]>();
for (int[] x : theList)
if (x[0] == 4)
list1.add(x);
return list1;
}
改变为,就能更能说明名称的意图
public List<int[]> getFlaggedCells() {
List<int[]> flaggedCells = new ArrayList<int[]>();
for (int[] cell : gameBoard)
if (cell[STATUS_VALUE] == FLAGGED)
flaggedCells.add(cell);
return flaggedCells;
}
又例如
int elapsedTimeInDays;
int d; // elapsed time in days
前者使用的表明意图的名称比注释更清晰
2.避免误导
例如使用accountList时,要小心,这向阅读者传达的信息是,这是一个List,但如果不是列表,而只是一个数组。简单的使用accounts或者accountGroup比较安全
3.使用有意义的区分
在一段代码中清除存在相同类型的两个不同变量
public static void copyChars(char a1[], char a2[]) {}
public static void copyChars(char source[], char destination[]) {}
后者的区分更有意义
又例如类名Product,ProductInfo,ProductData三个类在区分上很不明确,不能直接看出三个类的区别
getActiveAccount();
getActiveAccounts();
getActiveAccountInfo();
这个三个方法名也会给使用者带来麻烦
4.使用可发音的命名
一个经典的例子就是genymdhms(generation date, year, month, day, hour, minute, and second),这个方法无法发音,就不方便和他人交流。generateTimeStamp是个更好的名字。
例如
class DtaRcrd102 {
private Date genymdhms;
private Date modymdhms;
private final String pszqint = "102";
/* ... */
};
重构为
class Customer {
private Date generationTimestamp;
private Date modificationTimestamp;;
private final String recordId = "102";
/* ... */
};
5.使用能搜索的名称
for (int j=0; j<34; j++) {
s += (t[j]*4)/5;
}
其中的产量数字,不能有效搜索到,不方便修改。
int realDaysPerIdealDay = 4;
const int WORK_DAYS_PER_WEEK = 5;
int sum = 0;
for (int j=0; j < NUMBER_OF_TASKS; j++) {
int realTaskDays = taskEstimate[j] * realDaysPerIdealDay;
int realTaskWeeks = (realdays / WORK_DAYS_PER_WEEK);
sum += realTaskWeeks;
}
这段更长的代码更方便搜索和修改
6.避免在名称中编码附加信息
例如,匈牙利命名法,m_或_前缀,IShapeFactory接口前缀I,现在的IDE已经可以更有效的完成前三种的功能,已经没有这样使用的必要了。
7.类名使用名词单数形式Customer, WikiPage, Account
8.方法名使用动词或动词短语postPayment, deletePage, save
9.同一个单词使用同一种命名
例如fetch,retrieve,get三者表示同一个意思,最好统一使用一个
10.使用程序编写领域的名词
例如AccountVisitor,JobQueue,UserFacade
11.使用问题领域的名词
12.添加有意义的上下文
private void printGuessStatistics(char candidate, int count) {
String number;
String verb;
String pluralModifier;
if (count == 0) {
number = "no";
verb = "are";
pluralModifier = "s";
} else if (count == 1) {
number = "1";
verb = "is";
pluralModifier = "";
} else {
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
String guessMessage = String.format(
"There %s %s %s%s", verb, number, candidate, pluralModifier
);
print(guessMessage);
}
重构为
public class GuessStatisticsMessage {
private String number;
private String verb;
private String pluralModifier;
public String make(char candidate, int count) {
createPluralDependentMessageParts(count);
return String.format(
"There %s %s %s%s",
verb, number, candidate, pluralModifier );
}
private void createPluralDependentMessageParts(int count) {
if (count == 0) {
thereAreNoLetters();
} else if (count == 1) {
thereIsOneLetter();
} else {
thereAreManyLetters(count);
}
}
private void thereAreManyLetters(int count) {
number = Integer.toString(count);
verb = "are";
pluralModifier = "s";
}
private void thereIsOneLetter() {
number = "1";
verb = "is";
pluralModifier = "";
}
private void thereAreNoLetters() {
number = "no";
verb = "are";
pluralModifier = "s";
}
}
就能给number,verb和pluralModifier提供一个很清晰的上下文
13.不要添加没有必要的上下文
例如一个应用程序交Gas Station Deluxe,没有必要在所有东西前面添加GSD。QT的所有类前加Q就是没有必要的。
分享到:
相关推荐
开发人员清单主要来自Robert C Martin的书Clean Code 目录 :bookmark_tabs: 命名事物 :Japanese_discount_button: 名称应显示意图 它应该告诉您它为什么存在,它做什么以及如何使用。 名称应描述上下文。 避免...
基本原则是:变量名=属性+类型+对象描述,其中每一对象的名称都要求有明确含义,可以取对象名字全称或名字的一部分。命名要基于容易记忆容易理解的原则。保证名字的连贯性是非常重要的。 举例来说,表单的名称...
如果您喜欢clean-code-dotnet项目或对您有帮助, clean-code-dotnet星号 :white_medium_star: 该存储库。 这不仅有助于增强我们的.NET社区,而且可以提高全球.NET开发人员的原始代码技能。 非常感谢你 :thumbs_up: ...
Clean Code - A Handbook of Agile Software Craftsmanship 一书的注释 指数 小事很重要。 上帝在细节中。 我们所做的 80% 或更多的事情被古怪地称为“维护”:行为或修理。 他们向我们介绍了 Total Productive ...
命名约定..........................................................................................................................................6 某些背景...............................................
这个原则适用于大部分的工程。...通过仔细斟酌的方法命名、清晰的流程控制,代码本身就可以拿出来当作文档使用,而且它永远不会过期。相反,注释不能让写的烂的代码变的更好。如果别人只能依靠注释读懂
一个类应该有一个,而且只有一个,改变的理由。 DIP - 依赖倒置原则 - 类应该依赖于抽象,而不是具体的细节。 第1章干净的代码 编写干净的代码需要纪律。 我们需要努力获得“代码意识”。 未经测试的代码不干净。 ...
干净的代码架构颤振具有干净代码架构的种子应用在干净的代码体系结构中,主要包括三个层... 注意:我们没有额外的mapper类,我们将仅通过dart利用命名的构造函数将数据集从一种形式映射到我们的模型。 toJson和fromJso
每个产品都有一个名称,一个价格和一个名称。 如果用户是雇员,他们将在所有产品上获得5%的折扣。 ProductDAO本质上是一个用于存储产品信息的模拟数据库,即UserDAO 寻找的东西 为了清理代码,您应该寻找以下内容 ...
如何给变量命名,如何让它变得有意义成了程序员不可逾越的难题,这篇文章参考了 Clean Code ,提供7条命名建议,希望能在取名字的过程中给你带来一些帮助。 以下都是基于Python3.7语法 1、使用有意义而且可读的变量...
我在公司内部进行编码实践分享所制作的幻灯片,其中大量采用了clean code 和code complete 以及其他图书的案例。希望对阅读者有所帮助
在阅读clean code书籍的时候,让我体会很多,因此我也用文字记录下这些有意义的知识。我认为这本书读十遍都不为过,下面我讲解一下自己的关于变量、函数、类的命名规则笔记。
最终,该论坛的结果导致方法的命名以及“自适应”标题下的各种子标记方法的分类。 本次会议的其他成果是您在宣言中阅读了关于4个关键价值和基于上述价值的其他12条原则的协议。 后来,鲍勃叔叔在对象导师的其他同事...
Android上的Clean Architecture:Teamwork.com! 该存储库的目的是通过一个非常简单(但希望很清晰... 模块结构:每个架构层都有自己的模块,并严格遵循Clean原则和命名。 分层:如何使用api / implementation配置Gra
小号eiton(整齐):有句老话说的美国:一个一切地方,一切都各就各位。 一段代码应该在您希望找到它的地方 - 如果没有,您应该重新考虑将其放在那里。 小号eiso(清洗):删除未使用的东西(注释等)。 摆脱他们 S ...
开发规范,该规范结合本人多年的开发经验以及《Clean Code》,阿里开发规范凝聚而成。如有更好建议,欢迎到 GitHub 提 issue。此规范仅限于 Android 基本规范,如想要查阅更详细的规范,请查看我的另外一篇文章原文...
练习:简单乘法 已发布的练习与BOOTCAMP培训有关-... 06-03-2021-使用常量变量(const)和调整后的常量命名法(使用CleanCode概念) Java脚本 //SOLUCAO 1 /* Utilizando variaveis constantes (const) e ajustado no
Code这个词本身具有足够的描述性和直觉上的意义,但将其付诸实践就像创作奏鸣曲、写一部作品、雕刻大卫和绘画一样困难。 因此,如果您不熟悉此概念,请从以下链接开始以了解其要点。 您将获得相同的想法并形成意
命名脚本并粘贴来自Github的代码(Code.gs) 根据需要编辑过滤器 选择runMyFilters并按“播放”按钮以测试运行脚本: 在需要的授权通知上单击“继续”: 允许该应用查看和管理您的邮件: 按时钟按钮编辑触发器...