《clean code》讲述代码中的道,而不是术
Clean code
看《clean code》一书,学习高手写出的代码,简单高效的代
1.目标
Bjarne Stroustrup:优雅且高效;直截了当;减少依赖;只做好一件事
Grady booch:简单直接
Dave thomas:可读,可维护,单元测试
Ron Jeffries:不要重复、单一职责,表达力(Expressiveness)
代码的书写,一定程度上体现了编程的思想,编码者的功力,标识出红色的部分我觉得体现了函数式编程,面向对象的思想,需要细细体会
2 命名
2.1 前期统一规范,名副其实
开发之前约定好,严格遵守,不能再后期临时添加,或者迭代时候,随意命名,或者用注释来解释命名
2.2 避免产生歧义
不要挂羊头卖狗肉,功能与命名不统一,容易出现再后期维护,临时添加需求,迭代等情况
2.3 命名不宜过长,容易搜索易读
名字只是个代名词,能够让人易读,易搜,易讨论,表达出语义,看到这个单词直接思维映射,不能在讨论的时候,一个命名卡半天说不出来,或者太长想不全
3 注释
The proper use of comments is to compensate for our failure to express ourself in code.
事实就是:注释的适当作用在于弥补我们用代码表达意图时遇到的失败,注释只是二手信息。
The truth is in the code 有表现力的代码才是真正的代码
什么是好的注释:
基本信息 --- 便于代码维护,交接
对意图的注释,为什么要这么做 --- 功能实现的思路
警示 --- 容易产生错误,可能为了性能等因素,牺牲了可读性,是一种平衡
放大看似不合理之物的重要性 --- 专业知识,代码的专业性,比如在算法中
4 函数
回归本义,到底什么是函数
我的理解:它是一个代码工具,强调的是,只做一件事,只做一件事,要查询就是查询,要修改就是修改,有固定的输入参数,返回你想要的固定输出,没有多余的副作用,体现它的单一原则
函数里面嵌入多个层级的函数,这种方式见过好多
5 函数抽层应用
‘没有什么问题不是函数抽层解决不了的,如果不行,那就两层’
原则:一个函数,一个抽象层次,函数中的语句表现同一个抽象层级,尤其在面对大型项目复杂交互时,按照广度优先策略,先了解整体结构,抓住主干,然后再深入细节,比如把大象装进冰箱:
def pushElephantIntoRefrige():
openRefrige() 打开冰箱
pushElephant() 把大象放入冰箱
closeRefrige() 关上冰箱
他们属于一个层级,而如何放入冰箱这个细节需要再有一个新的层级

6 测试
测试原则:
You are not allowed to write any production code unless it is to make a failing unit test pass. 没有测试之前不要写任何功能代码
You are not allowed to write any more of a unit test than is sufficient to fail; and compilation failures are failures. 只编写恰好能够体现一个失败情况的测试代码
You are not allowed to write any more production code than is sufficient to pass the one failing unit test. 只编写恰好能通过测试的功能代码
《clean code》讲述代码中的道,而不是术的更多相关文章
- 《Clean Code》 代码简洁之道
		
作者介绍 原文作者: Robert C. Martin, Object Mentor公司总裁,面向对象设计.模式.UML.敏捷方法学和极限编程领域的资深顾问,是<敏捷软件开发:原则.模式.与实践 ...
 - Clean Code 《代码整洁之道》前四章读书笔记
		
第一章: 整洁的代码只做好一件事 减少重复代码 提高表达力 提早构建简单抽象 让营地比你来时更干净 第二章:有意义的命名 名副其实:如果名称需要注释来补充,就不算是名副其实. ...
 - Implement Property Value Validation in Code 在代码中实现属性值验证(XPO)
		
This lesson explains how to set rules for business classes and their properties. These rules are val ...
 - Access the Security System in Code 在代码中访问安全系统
		
This lesson will guide you through using the static SecuritySystem class to check whether or not a u ...
 - 免费电子书:C#代码整洁之道
		
(此文章同时发表在本人微信公众号"dotNET每日精华文章",欢迎右边二维码来关注.) 题记:<Clean Code(代码整洁之道)>是一本经典的著作,那么对于编写整洁 ...
 - 代码整洁之道Clean Code笔记
		
@ 目录 第 1 章 Clean Code 整洁代码(3星) ?为什么要整洁的代码 ?什么叫做整洁代码 第 2 章 Meaningful Names 有意义的命名(3星) 第 3 章 Function ...
 - 【Azure 云服务】在Cloud Service的代码中如何修改IIS Application Pool的配置呢? 比如IdleTimeout, startMode, Recycling.PeriodicRestart.Time等
		
什么是 PaaS?Platform as a Service 平台即服务 (PaaS) 是云中的完整开发和部署环境,你可以使用其中资源交付内容,从基于云的简单应用到启用云的复杂企业应用程序皆可.你以即 ...
 - 《代码整洁之道》(Clean Code)- 读书笔记
		
一.关于Bob大叔的Clean Code <代码整洁之道>主要讲述了一系列行之有效的整洁代码操作实践.软件质量,不但依赖于架构及项目管理,而且与代码质量紧密相关.这一点,无论是敏捷开发流派 ...
 - Clean Code 代码整洁之道
		
军规:让营地比你来时更干净. 整洁代码 Leblanc : Later equals never. (勒布朗法则:稍后等于永不) 对代码的每次修改都影响到其他两三处代码. 修改无小事. 如同医生不能遵 ...
 
随机推荐
- Spark 系列(十)—— Spark SQL 外部数据源
			
一.简介 1.1 多数据源支持 Spark 支持以下六个核心数据源,同时 Spark 社区还提供了多达上百种数据源的读取方式,能够满足绝大部分使用场景. CSV JSON Parquet ORC JD ...
 - python调用支付宝支付接口
			
python调用支付宝支付接口详细示例—附带Django demo代码 项目演示: 一.输入金额 二.跳转到支付宝付款 三.支付成功 四.跳转回自己网站 在使用支付宝接口的前期准备: 1.支付宝公 ...
 - Maven 项目使用mybatis的环境搭建-基于xml形式实现查询所有的功能
			
首先了解一下什么是 MyBatis? MyBatis 是一款优秀的持久层框架,它支持定制化 SQL.存储过程以及高级映射.MyBatis 避免了几乎所有的 JDBC 代码和手动设置参数以及获取结果集. ...
 - .netcore持续集成测试篇之 .net core 2.1项目集成测试
			
系列目录 从.net到.net core以后,微软非常努力,以每年一到两个大版本的频率在演进.net core,去年相继发布了.net core 2.1和2.2,其中2.1是长期支持版,不断的快速更新 ...
 - nessus安装
			
1.安装注册 (1)从https://www.tenable.com/products/nessus/select-your-operating-system上下载对应操作系统版本的nessus,结果 ...
 - c11标准
			
在编译器vs13及其以上可以使用 编译器对语言的一种优化 1.变量初始化 int a=0,a(10),a{10};定义a的值的三种方式 2.nullptr 相当于c的null 有类型 更加的安全 3. ...
 - 盘一盘 NIO (三)—— Selector解析
			
Selector是个啥? Selector是Java NIO核心组件中的选择器,用于检查一个或多个Channel(通道)的状态是否处于可读.可写.实现一个单独的线程可以管理多个channel,从而管理 ...
 - Scala 系列(二)—— 基本数据类型和运算符
			
一.数据类型 1.1 类型支持 Scala 拥有下表所示的数据类型,其中 Byte.Short.Int.Long 和 Char 类型统称为整数类型,整数类型加上 Float 和 Double 统称为数 ...
 - unity之单例模式
			
Unity中常见的四种单例 点击进入
 - 配置springboot项目使用外部tomcat
			
配置springboot项目使用外部tomcat 1.在pom文件中添加依赖 <!--使用自带的tomcat--> <dependency> <groupId>or ...