Clean Code 笔记 之 第二章
你是否真正的会命名
前言
这是我第二次看这本书了(Clean Code)的时候,第一次看的时候是,看到某世界五百强在他们的代码中我竟然看不到一句注释,现在我还记得当时的情景,当我Download 下第一份代码的时候,我想在代码中了解一下公司代码编写习惯以及少量的业务,在我以前的认知中,代码中加上很多注释这些注释有助于我了解业务,但是在这份代码中我竟然看不到一行注释,当时我的反应是,一定会有文档的存在,我就向项目的负责人求助了,谁知他回了一句你多理解一下命名就行了,(其实我的英语非常差,后来慢慢习惯后才发现好的命名一定是有巨大的帮助的)。
个人理解
在《领域驱动》一书中有这样的一个名词 “通用语言” 他的主要目的是使用统一的语言给某一事物进行命名,在以后的沟通中可以减少浪费时间与信息之间的误差。从而减少沟通成本。
“通用语言“ 在代码中我们可以看成“命名规范“”,这是程序员与程序员之间,Code与code之间的沟通方式。
在一份好的代码中变量,函数,类的名称已经可以告诉我们所有的大问题。如果你的代码需要加上注释才能告诉别人重要的问题,那我想您可以考虑一下你的命名是否合理了。
当然代码的命名也不是一成不变的,不如你的业务发生了改变,你的命名可能也需要发生改变,如果不进行改变会造成信息缺失的后果,最终将导致代码难以维护。
示例
下面用两段代码演示出上面的观点
//用户中筛选出用户类型是Vip的用户
public List<string> getUsersName()
{
List<string> list = new List<string>();
foreach (var item in UserList)
{
if (item.Type == "Vip")
list.Add(item.Name);
}
return list;
}
上面的代码我也是曾经无数次的写过,最终也是表达出了我的需求,但是现在有这样一个要求,代码中不要出现中文或者说需求需要改成“查找用户年龄大于100岁的用户名称”
这个时候大多数人的习惯是改动条件“item.Type = "100"”注释有很大的可能被忽略这个时候新的开发人员接手了很容易产生误导,因为他本可以通过命名就不用再看这段代码的,因为命名的不规范,导致了他必须跟踪进来查看代码,并且还造成了误解。
说一下以上代码中的错误:
getUsersName:不能见名识意
List<string> list :不能告知集合内容
UserList :命名错误因为这里不适合使用List来说明这是一个集合,应使用Users 因为list 对于程序员来说具有很特殊的意义。除非 内容真是一个List 类型
item.Type :不知具体含义
return list; 不能告知我如何使用返回值
下面是正确的代码示例:仅供参考 这里user.Type = "VIP" 仅用于演示
public List<string> getVipUserNameByUserType()
{
List<string> vipUsersName = new List<string>();
foreach (var user in Users)
{
if (user.Type == "VIP")
vipUsersName.Add(user.Name);
}
return vipUsersName;
}
所以建议大家还是看一遍cleanCode
总结