编码之道:取个好名字很重要

代码就是程序员的孩子,给“孩子”取个好听的名字很重要!

我们在项目开发中,接触到的变量、函数、类多数都是项目自己定义的,往往都是为了解决一些特定的领域的问题,,引入了各种各样的概念,代码里面的名字就对应着问题领域或方案领域的这些概念,所以,对于一个命名良好,代码规范,设计简洁的系统,要想非常快的理解一个系统,最直接的方式就是RTFC(Read The Fucking Code)。对于一个不断演进的系统,代码的可读性至关重要,首要要解决的问题就是名字,变量名、函数名、类名等都需要仔细斟酌,认真对待,一个能够简洁,能够清晰表达概念和意图的名字就显得尤为重要。

更多内容:

阅读《代码整洁之道》这本书后发现其中说的内容在我们自己项目中比比皆是,随便拿出一块代码都可以当做反面教材给大家讲半天。长时间积累,导致代码发霉变质,取名也是毫无章法,信手拈来。阅读这样的代码,撞南墙的心都有了。下面结合自己项目中的问题和《代码整洁之道》谈谈关于命名相关的原则。

1. 原则:名副其实

BAD:

int t = currentTime.elapse(e); // 消逝的时间,以毫秒计…if (t > timeout_value){ Zebra::logger->debug(“—一次循环用时 %u 毫秒—–“, t);}

GOOD:

int elapsed_ms = currentTime.elapse(e);…if (elapsed_ms > timeout_value){ Zebra::logger->debug(“—–一次循环用时 %u 毫秒—“, elapsed_ms);}2. 原则:避免误导

BAD:

sendToZoneServers(); // sendToAllZoneServers会好点3. 原则:做有意义的区分

BAD:

void copy(char a1[], char a2[]) { for (size_t i = 0; a1[i] != ‘\0’; i++)a2[i] = a1[i];}

GOOD:

void copy(char source[], char dest[]) { for (size_t i = 0; source[i] != ‘\0’; i++)dest[i] = source[i];}4. 原则:使用可读的名字避免过度使用缩写可读的名字交流方便

猜一猜下面的类是干什么的?和别人怎么说这几个类?

根据这些简直变态的缩写,如果没有注释基本上很难知道是干什么的,当你和别人交流的时候,你就不得不一个一个字母来念“X-L-Q-Y”、“L-T-Q Manager”,鬼知道你说的是什么?PS. XLQY-XianLvQiYuan(仙履奇缘), LTQ-LiaoTianQun(聊天群),有这样的名字也是醉了。

BAD:

;class LTQManager;5. 原则:使用可搜索的名字避免使用Magic Number避免使用单字母,或出现频率极高的短字母组合(注意度的把握)

BAD:

if (obj->base->id == 4661) // 4661是啥玩意?{ usetype = Cmd::XXXXXXX;}int e; // 怎么查找?XXXX:iterator it; // 变量作用的范围比较大的时候,也不见得是个好名字

GOOD:

#define OJBECT_FEEDBACK_CARD 4661if (OJBECT_FEEDBACK_CARD == obj->base->id){ usetype = Cmd::XXXXXXX;}6. 原则:避免使用编码”匈牙利标记法:

PS.匈牙利命名对于我们这些在Linux下摸爬滚打的好多年的来说,看着真心别扭。

成员前缀: 形如:m_name, m_xxx基本上都无视,为何要多次一举

PS.说到这一点,可能有些同学有不同意见了,“我这样写是为了区分成员变量和临时变量啊!”,好像这样写也没什么大不了,遵循代码规范即可。如Google的C++代码规范,私有变量形如:xxx_,加后缀_,其目的除了让你知道这货是个私有变量,还有一点就是防止有些人图省事把带私有变量直接public掉,因为谁也不喜欢在代码里面看到大量这些带把的玩意。

接口和实现: 7. 原则:名字尽量来自解决方案领域或问题领域使用解决方案领域名称:

写代码的同学多数都是都出自CS,术语、算法名、模式名、数学术语尽管用。如AccountVisitor:Visitor模式实现的Account类。

使用问题领域的名称

我们代码里面多数都是这些名称,不明白找策划问问,基本上都是功能相关的名称。

8. 原则:适当使用有意义的语境

BAD:

// 看着整齐?使用方便?DWORD love_ensure_type_; //当前的爱情保险类型DWORD love_ensure_ret_; //购买爱情保险回应标示DWORD love_ensure_total_; //现在已经盖章数目DWORD love_ensure_…_; //…DWORD love_ensure_…_; //…最后:我们的C++命名规范

文件名:

首字母大写,多个词组合起来如: SceneUser.h Sept.h

类名/名称空间名:

函数名:

变量名:

取名是一件严肃的事情,我们需要认真对待,名字代表着一个个概念,名字代表着你想表达的意图,好名字是可读代码的首要条件:

看着它洗涤一缕缕阳光,看着它映衬一片片星辉,

编码之道:取个好名字很重要

相关文章:

你感兴趣的文章:

标签云: