关键词:
第二次读代码整洁之道(Clean Code)了,在少许开发经验加持下,没有第一次那么晦涩后,整体对本书也有了共鸣,这本书应该作为指导手册,平时可以多翻一翻,说不定会有新的不同感悟,当然了,书中的条例并不需要你照本宣科地按着做,那样没意义。
首先,代码就像书稿,在完成一件作品之前,我们需要不停地对作品进行推敲,所以重构是贯穿这个代码的生命周期,在这个过程中,隐含着一个工作前提:测试用例。
单元测试
本书用了一大章节来讲单元测试,但核心就一句话,测试驱动开发(TDD)的编程思维,这只是一个方法论,并不是什么规范。
例子
我们可以先写以下的测试代码,再定义User 以及 UserService的逻辑
@Test
void test()
User user = User.build();
userService.create(user);
;
方法论在于,无论任何方式,比如采用postman编写http请求也可以进行测试,但通过硬代码更大的优势在于测试用例靠近于使用端,便于传阅查看。
ps:不写测试的代码就像上大号不洗手
代码结构
垂直分隔
上文讲到测试用例靠近于使用端,在我们进行阅读时,也是习惯性自上而下阅读,当变量或者函数在被调用附近所定义时,也即垂直距离更近时,更方便阅读。
类成员
面向对象编程时,类成员变量的访问通常来说都应该由实体进行操作,所以我们经常性会提供get set方法,如以下
class test
private int i;
public int getI()
return i;
先声明成员变量,再声明函数的方式,便于阅读。而早期学习c++的时候,通常煞有其事地是 先声明函数,再声明变量,反而每次跳转查看类时,需要先定位到底部。
函数
输出参数
以前写c++时(c03),为了减少拷贝,经常采用引用参数的方式,如下所示:
void GenOrder(Goods goods, Order& order);
通过函数名可以确定该函数的职能是生成订单,所以应该调整为
void Order GenOrder(Goods goods)
Order order = new Order;
return std::move(order);
现在c++11 通过编译优化后,可以临时的创建复制,而在java等其他语言中,无非就是一次引用计数。
老生常谈的单一职责
比如 GenOrder该函数,一看便知是生成订单,通常的规范要求API 采用 动词 + 名称的方式,因为api一般都是描述对象的行为方式。
未避免过度封装,可以采用描述性行为,比如 检测订单时
public boolean checkOrderValid()
if (money)
if (count)
不需要将金额,数量等检测细节过度封装成函数,除更复杂的逻辑外。
什么情况下需要拆分呢,当if 或者switch可以用多态时,比如计算不同雇员的薪水时:
public Money calculatePay(Employee e)
switch(e.type)
case:
return calA();
case:
return calB();
这里处理为
A implements Employee
pay();
B implements Emplyee
pay();
不同雇员的薪水根据雇员的身份进行多态计算
java 的枚举可以拥有方法和字段,所以我们也可以采用以下方式重构:
public enum HourlyPayGrade
A
public double pay()
,
B
public double pay()
;
public abstract double rate();
使用异常替代返回错误码
在写c++时,本身追求的是c++的高性能,所以经常会有规范是禁止是用exception,在编译时关闭exception可会让程序减少exception的成本,比如大小或者速度,那取而代之的是setError、getError的方式。
但其实,本着工程化,且不需要压榨最后一丁点cpu或者内存时,我们还是希望使用Exception的方式,在可预知出现Exception的地方把问题处理掉,可以让我们的程序更加健壮,毕竟可用性可比性能在大部分场合的重要性更大。
而且通常需要我们抽离Try/Catch代码块
void test()
try
func();
catch()
xxxx
本身 异常的处理 xxx 部分就是一件单独职责的事情,不应该跟func的逻辑耦合在一起,看看自己的tryCatch代码部分,第一眼感觉如何呢?
null值不是合理值
查看下自己的代码,你是否会经常检测null的存在呢?
那既然不是合理值,那就应该进行错误提示,比如NotFind,或者是特例化对象,或者是空数组等“合理值”,让调用者更加舒服的处理,而往往我们又可能是那个调用者,让自己以后更舒服的码代码不好嘛。
返回不能是null值,接收值也不应该是null值,当我们无法百分之百信任调用方时,那就是不能信任,必须禁止传入null值。
cleancode(代码片段)
代码整洁之道对于程序的重构及可读性至关重要。开始整洁之道吧!!!一、抽离trycatch模块publicvoiddelete(Pagepage)trydeletePageAndAllReference(page);catch(Exceptione)logError(e);privatevoiddeletePageAndAllReference()deletePage();regist 查看详情
php整洁之道(代码片段)
摘录自RobertC.Martin的CleanCode书中的软件工程师的原则,适用于PHP。这不是风格指南。这是一个关于开发可读、可复用并且可重构的PHP软件指南。并不是这里所有的原则都得遵循,甚至很少的能被普遍接受。这些虽然只是指导,但是... 查看详情
php代码整洁之道
介绍RobertC.Martin‘s的软件工程师准则CleanCode同样适用于PHP。它并不是一个编码风格指南,它指导我们用PHP写出具有可读性,可复用性且可分解的代码。并非所有的准则都必须严格遵守,甚至一些已经成为普遍的约定。这仅仅作为... 查看详情
一周总结《代码整洁之道》读后感1
到了第十章了,对于大项目的预估也包括在了里面。1.预估是软件开发人员面对的最简单也是最可怕的活动之一了。2.预估影响到的商业价值巨大,关乎声誉,也给我们带来了许多的苦恼和挫折。预估是业务人员和开发人员之间... 查看详情
typescript代码整洁之道
...那么,整洁代码的衡量标准是什么?本文将RobertC.Martin的CleanCode思想融入到TypeScript,一起探讨研究代码整洁之道。 WTFs/Minute 1.命名的艺术计算机科学只存在两个难题:缓存失效和命名。——PhilKarIton 给变量命名... 查看详情
cleancode
代码整洁之道代码整洁之道1.有意义的命名1.有意义的命名名副其实变量、函数或类的名称应该告诉你,它为什么会存在,它做什么事,应该怎么用,如果需要注释来补充,那就不算是名副其实。避免误导某些系统的专有名词不... 查看详情
c#代码整洁之道读后总结与感想
1. 基本信息C#代码整洁之道:代码重构与性能提升 ,英文名为CleanCodeinC#。作者:[英]詹森·奥尔斯(JasonAlls)著,刘夏译机械工业出版社,2022年4月出版。1.1. 读薄率书籍总字数489000字,笔记总字数8927字。读薄率8927÷48... 查看详情
代码整洁之道pdf下载
...]RobertC·Martin出版社: 人民邮电出版社原作名: CleanCode:AHandbookofAgileSoftwareCraftsmanship译者: 韩磊出版年: 2010-1-1页数: 388定价: 查看详情
豆瓣评分8.6!这本《代码整洁之道》到底牛在哪里?重点都在这了
《代码整洁之道》(CleanCode)豆瓣评分8.6,是开发人员的必读书籍,尤其是当您想成为一名更好的软件开发人员时。这本书解释了什么是干净的代码和最佳实践,以帮助您写出干净整的代码。代码整洁之道阅... 查看详情
代码整洁之道(代码片段)
有意义的命名1名副其实2避免误导3做有意义的分区废话都是冗余。Variable永远不应出现在变量名中,Table一词永远不应出现在表名中。当缺少明确约定:变量moneyAmout与money没区别,customerInfo与customer没区别,accountData与account没区别... 查看详情
代码整洁之道(代码片段)
有意义的命名1名副其实2避免误导3做有意义的分区废话都是冗余。Variable永远不应出现在变量名中,Table一词永远不应出现在表名中。当缺少明确约定:变量moneyAmout与money没区别,customerInfo与customer没区别,accountData与account没区别... 查看详情
代码整洁之道-对象和数据结构(代码片段)
现在,有一个计算面积的需求,其中一种实现如下:classSquarepublic$side;classGeometrypublicfunctionarea($shape)if($shapeinstanceofSquare)return$shape->side*$shape->side;return0; 有人看了,你这抽象的有问题啊,很明显是面向过程的,如果新加 查看详情
代码整洁之道(代码片段)
...可见命名。我们给变量、函数、参数、类和封包命名、源代码文件命名、目录命名,良好的命名规范使得代码以及工程的维护难度大大降低,下面列出良好命名的几条简单规则。1.名副其实变量、函数或类的名称应该已经... 查看详情
15个书写javascript代码的整洁之道(实用!)(代码片段)
...论你是React开发者还是Node.js开发者.都能写出可以运行的代码.但是你写的代码美观并且别人能看懂吗?下面的规则可以让你的JavaScript代码更加整洁和清晰.规则1.不要使用随机的字符 查看详情
整洁架构之道--三种经典的编程范式(代码片段)
本文是《CleanArchitecture》--整洁架构之道中关于编程范式相关章节的笔记,首发于公众号「Go招聘」这和软件架构的三大关注重点不谋而合:功能性、组件独立性以及数据管理。的方式。回答此问题的同时另外还会搬出这三个词语... 查看详情
php开发-代码整洁之道(代码片段)
CleanCodePHP目录介绍变量使用见字知意的变量名同一个实体要用相同的变量名使用便于搜索的名称(part1)使用便于搜索的名称(part2)使用自解释型变量避免深层嵌套,尽早返回(part1)避免深层嵌套,尽早返回(part2)少用无意义的变量名... 查看详情
php开发-代码整洁之道(代码片段)
CleanCodePHP目录介绍变量使用见字知意的变量名同一个实体要用相同的变量名使用便于搜索的名称(part1)使用便于搜索的名称(part2)使用自解释型变量避免深层嵌套,尽早返回(part1)避免深层嵌套,尽早返回(part2)少用无意义的变量名... 查看详情
《代码整洁之道》
代码整洁之道代码猴子(CodeMonkey):低水平编码者.童子军规.技艺(craftsmanship):知和行.学写整洁代码,掌握原则和模式,并付出行动.整洁代码代码呈现了需求的细节.这些细节无法被忽略或抽象,必须要严谨,精确,规范和详细.糟糕的代码... 查看详情