你是否真正的会命名

前言

这是我第二次看这本书了(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

总结

最新文章

  1. xml引用实体dtd不能成功的问题
  2. 调用MyFocus库,简单实现二十几种轮播效果
  3. Python之路【第十一篇】前端初识之HTML
  4. UI auto test
  5. [ROS] slam_gmapping
  6. Creating Your Own Server: The Socket API, Part 1
  7. [github] 创建个人网页
  8. redmine使用汇总redmine软件工程过程
  9. 二十六、oracle pl/sql 分页
  10. 怎样让外界无法改变自定义view的尺寸大小
  11. PLECS_晶闸管调速系统_9w
  12. 201771010126 王燕《面向对象程序设计(Java)》第十四周学习总结(测试程序11)
  13. Linux环境下使用Android NDK编译c/c++生成可执行文件
  14. Visual Studio VS使用freopen调试控制台闪退
  15. shell基础入门(一)
  16. [android] 帧动画和补间动画
  17. python urllib库
  18. react入门-props.children
  19. iOS - 音乐播放器之怎么获取音乐列表
  20. XMind2TestCase:一个高效测试用例设计的解决方案!

热门文章

  1. OWIN,Katana,identity整体概述
  2. Socket与WebSocket以及http与https重新总结
  3. webpack篇,结合理论与实际,加以透彻分析!
  4. sublime_text运行python ctrl+b运行的界面隐藏了怎么重新调出来恢复显示?
  5. 关于css中布局遇到的一些问题
  6. 7.InfluxDB-InfluxQL基础语法教程--INTO子句
  7. cpu开多少线程合适(转)
  8. 08webpack-复习
  9. 【BZOJ3716】[PA2014]Muzeum(贪心+网络流)
  10. MySQL数据库 存储引擎,创建表完整的语法,字段类型,约束条件