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__________ ____________ ...
随机推荐
- 查看java程序的指令码
java程序转化为JVM指令码分析 1.编写java文件(简易示例) /** * @author yew * @date on 2019/12/9 - 15:53 */ public class Ma ...
- 一句DELETE引发的加班(Mysql 恢复Delete删除的数据)
本机用的Navicat连mysql测试DB又连了正式DB,因为本地与正式要频繁操作所以都打开了很多查询,本来要DELETE删除测试DB的数据,没看清在正式环境执行了.共删除了325条数据,然后在网上找 ...
- E203 同步fifo
1. 输入端, 输入信号, i_vld,表示输入请求写同步fifo,如果fifo不满,则fifo发送i_rdy 到输入端,开始写fifo.i_vld和i_rdy是写握手信号. 2.输出端 o_rdy表 ...
- tcpdump 介绍
tcpdump 是一款强大的网络抓包工具,dump the traffice on anetwork,对网络上的数据包进行截获的包分析工具.熟练掌握 tcpdump 可以方便我们跟踪解决网络丢包,重传 ...
- jquery实现一些小动画二
jquery实现一些小动画二 jquery实现拖拽功能 <!DOCTYPE html> <html lang="en"> <head> < ...
- Codeforces Round #304 (Div. 2)(CF546D) Soldier and Number Game(线性筛)
题意 给你a,b(1<=b<=a<=5000000)表示a!/b!表示的数,你每次可以对这个数除以x(x>1且x为这个数的因子)使他变成a!/b!/x, 问你最多可以操作多少次 ...
- day28 8_7 网络编程之tcp协议
一.socket模块 socket模块就是用来网络搭建的模块,socket也叫套接字. 创建网络连接,需要使用两个模块进行模拟,一个作为server服务器端,一个作为client客户端. 在服务器端, ...
- 洛谷 P2357 守墓人
洛谷 P2357 守墓人 题目描述 在一个荒凉的墓地上 有一个令人尊敬的守墓人, 他看守的墓地从来 没有被盗过, 所以人们很放心的把自己的先人的墓 安顿在他那 守墓人能看好这片墓地是必然而不是偶然.. ...
- Ubuntu使用snap安装常用软件
1,snap简介 什么是snap,snap是一种全新的软件包管理方式,它类似一个容器拥有一个应用程序所有的文件和库,各个应用程序之间完全独立.所以使用snap包的好处就是它解决了应用程序之间的依赖问题 ...
- SSH登录服务器慢
最近频繁遇到ssh登录到服务器验证慢的这个问题,今天抽时间总结下原因以及解决办法. UseDNS 登录到服务器端查看sshd_config配置文件,当UseDNS项配置为yes时(默认情况下可 ...