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
总结

Clean Code 笔记 之 第二章的更多相关文章
- Stealth视频教程学习笔记(第二章)
Stealth视频教程学习笔记(第二章) 本文是对Unity官方视频教程Stealth的学习笔记.在此之前,本人整理了Stealth视频的英文字幕,并放到了优酷上.本文将分别对各个视频进行学习总结,提 ...
- Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数
原文:Introduction to 3D Game Programming with DirectX 12 学习笔记之 --- 第二章:矩阵代数 学习目标: 理解矩阵和与它相关的运算: 理解矩阵的乘 ...
- 流畅的python学习笔记:第二章
第二章开始介绍了列表这种数据结构,这个在python是经常用到的结构 列表的推导,将一个字符串编程一个列表,有下面的2种方法.其中第二种方法更简洁.可读性也比第一种要好 str='abc' strin ...
- Java编程思想_笔记_第二章_一切都是对象
第二章对于知识只是点到,会在以后章节会详细展开. 笔记的侧重会偏向记录自己知识模糊的地方.比如 xxx 很重要很难很实用,但是已经熟练使用就没有记录,而 “使用对象.成员名称来使用成员变量”,较简单而 ...
- 代码整洁之道Clean Code笔记
@ 目录 第 1 章 Clean Code 整洁代码(3星) ?为什么要整洁的代码 ?什么叫做整洁代码 第 2 章 Meaningful Names 有意义的命名(3星) 第 3 章 Function ...
- 【vue.js权威指南】读书笔记(第二章)
[第2章:数据绑定] 何为数据绑定?答曰:数据绑定就是将数据和视图相关联,当数据发生变化的时候,可以自动的来更新视图. 数据绑定的语法主要分为以下几个部分: 文本插值:文本插值可以说是最基本的形式了. ...
- Javascript高级程序设计读书笔记(第二章)
第二章 在HTML中使用Javascript 2.1<script>元素 延迟脚本(defer = "defer")表明脚本在执行时不会影响页面的构造,脚本会被延迟到 ...
- win32多线程程序设计笔记(第二章)
第二章线程的第一次接触,主要讲了如何创建线程以及需要注意的几点. 一.创建线程 与调用函数的过程类似;线程只不过用CreateThread的API将函数封装起来,并产生一个与主程序同时执行的程序来调用 ...
- java并发编程实战笔记---(第二章)线程安全:正确性
ThreadA__________ 同步 ______________ 异步 ___________ 异步 ThreadB__________ ____________ ...
随机推荐
- 十:装饰器模式(io流)
定义:装饰模式是在不必改变原类文件和使用继承的情况下,动态的扩展一个对象的功能.它是通过创建一个包装对象,也就是装饰来包裹真实的对象. 这一个解释,引自百度百科,我们 ...
- 命令 docker rm | docker rmi | docker prune 的差异
区别: docker rm : 删除一个或多个 容器 docker rmi : 删除一个或多个 镜像 docker prune : 用来删除不再使用的 docker 对象 一.docker rm 命令 ...
- php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断
php中函数 isset(), empty(), is_null() 的区别,boolean类型和string类型的false判断 实际需求:把sphinx返回的结果放到ssdb缓存里,要考虑到sph ...
- Excel解析工具easyexcel全面探索
1. Excel解析工具easyexcel全面探索 1.1. 简介 之前我们想到Excel解析一般是使用POI,但POI存在一个严重的问题,就是非常消耗内存.所以阿里人员对它进行了重写从而诞生了eas ...
- xcode6新建工程
xcode6中新建空工程 (2014-10-29 13:14:44) 转载▼ 标签: it ios 分类: iOS 升级xcode6之后,直接建立Empty工程后发现,这是太坑,真的是什么都没有啊.只 ...
- js 过滤字符 和检测 特殊字符【转】
// var str1 = str.replace(/\[\\'\\"\\\\\\/\\b\\f\\n\\r\\t\]/g, '');// 去掉转义字符 // var str2= str.r ...
- Django 练习班级管理系统六 -- 编辑老师列表
修改 views.py @auth def edit_teacher(request, nid): if request.method == "GET": obj = models ...
- odoo10学习笔记五:高级视图
转载请注明原文地址:https://www.cnblogs.com/ygj0930/p/11189279.html 树视图 tree视图表现出来是列表视图,列表中一行一纪录.可以根据每行纪录的某字段值 ...
- 构建根文件系统之init进程分析
busybox是ls.cp等命令的集合. 执行ls时,实际上是执行了busybox ls 执行cp时,实际上是执行了busybox cp 分析init程序之前,再让我们回想一下我们的目标:u-boot ...
- uiautomator 调试例子
package com.bing.cn; import com.android.uiautomator.testrunner.UiAutomatorTestCase; public class Dem ...