人孰无过,神亦容之,我们坦诚代码状态,因为它永不完美。
首先借用5S哲学——整理,整顿,清楚,清洁,身美
大抵到第五个境界的,没多少人了。clean code 永无止境
什么是整洁的代码,整洁的代码简单直接,整洁的代码如同优美的散文。整洁的代码从不隐藏设计者的意图,充满了干净利落的抽象和直截了当的控制语句。整洁的代码只做好一件事。
一,变量的命名(有意义的命名)——言道意到,意到言到
1,名副其实
2,避免误导
var a = 1; if(o == 1) {a = o;} else{a = 0;} //0 与o,1与l完全分辨不出来,这样有什么意义?
3,做有意义的区分
var a1; var a2;//请问你想定义的是什么?
4,使用众人周知的,可搜索的,读的出来的名称,不要使用俚语或双关语,避免思维惯性,不应该让读者在脑中把你的名词翻译为他们熟知的名词或者干脆不知道是什么。
5,添加有意义的语境
var addFirstName; var addList;//增加前缀提供语境,不要提供没用的语境
二,函数
1,短小
函数的第一规则是短小,第二规则还是短小
if else while 等语句代码块应该只有一行,并且大多数应该是调用语句。这样不但可以保持函数短小,而且调用语句一般都有描述性的语句,易于阅读和理解。
2,只做好一件事,并使用描述性的名称(不要怕长)
我们要判断一个函数是否只做一件事,很简单,看他是否能拆出另一个函数来。
//某一段代码 function find_same_barcode_add_to_new_inputs(i) { for(var j = 0; j < item.length; j ++) { if(inputs[i] == item[j].barcode) { new_inputs.push(item[j]); } } }//很明显,我们可以给他拆分出另外一个函数 function find_same_barcode_add_to_new_inputs(i) { for(var j = 0; j < item.length; j ++) { compare_barcode(inputs,i,item,j,new_inputs); } } function compare_barcode(i,j) { if(inputs[i] == item[j].barcode) { new_inputs.push(item[j]); } }//我们大致可以知道它做了什么:通过比较相同的barcode来将item中的内容添加到new_inputs中
不要害怕长名称,长而具有描述性的名称,要比短而费解的名称好
3,每个函数一个抽象等级
函数中混杂这不同等级的抽象等级,对与读它的人是一种折磨
4,函数的参数
最理想的参数数量是一,其次是二,尽量避免三参数的函数
首先,参数不易对付,他们具有太多的概念性,其次,从测试的角度看,参数更教人为难
要编写能确保参数各种组合运行正常的测试用例,很困难,若没有参数,很简单,有一个,也不太困难,有两个参数,就麻烦很多了,如果参数多于两个,测试覆盖的所有可能值会令人生畏
大师级的程序员把系统当作故事来讲,而不是当作程序来写。他们使用选定编程语言提供的工具构建一种更为丰富且更具表达力的语言,用来讲那个故事。
相关推荐
在阅读clean code书籍的时候,让我体会很多,因此我也用文字记录下这些有意义的知识。我认为这本书读十遍都不为过,下面我讲解一下自己的关于变量、函数、类的命名规则笔记。
如何给变量命名,如何让它变得有意义成了程序员不可逾越的难题,这篇文章参考了 Clean Code ,提供7条命名建议,希望能在取名字的过程中给你带来一些帮助。 以下都是基于Python3.7语法 1、使用有意义而且可读的变量...
目录 介绍 变量 函数 对象和数据结构 类 SOLID 测试 并发错误处理 格式 注释 翻译 介绍 软件工程原理,出自 Robert C. Martin 的著作 Clean Code,适用于 TypeScript。 这不是风格指南。 它是在 TypeScript 中生成...
clean-code-python目录简介变量函数对象和数据结构类S:单一职责原理(SRP)O:开放/封闭原则(OCP)clean-code-python目录简介变量函数对象和数据结构类S :单一责任原则(SRP)O:开放/封闭原则(OCP)L:Liskov...
adapted适用于JavaScript的Clean Code原则clean javascript内容简介变量函数对象和数据结构类SOLID测试异步错误处理格式化注释翻译引言Robert C. Martin Clean Code所著的编程原理,适用于JavaScript。 这不是样式...
内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至关重要。在大部分系统...
内存管理是计算机编程最为基本的领域之一。在很多脚本语言中,您不必担心内存是如何管理的,这并不能使得内存管理的重要性有一点点降低。对实际编程来说,理解您的内存管理器的能力与局限性至关重要。在大部分系统...
主要函数为scan(),完成对键盘的扫描并返回扫描的键值。Sodesw(),完成从键值到显示数码管码值的转换。display(),完成动态显示数码管。cmp (),完成输入密码与系统密码的比较,正确则开锁,错误不开。clean...
Functions and Variables Featured in This Chapter 本章所涉及的到的函数与变量 Section 4.9. Files and Directories Featured in This Chapter 本章所涉及的到的(代码)文件 Chapter 5. Network Device ...
其调用与 CFG_NAND_LEGACY 宏有 关,如果没有定义这个宏,系统调用 drivers/nand/nand.c 中的 nand_init();否则调用自己在 本文件中的 nand_init()函数,本例使用后者。fs2410.c代码如下: #if defined(CONFIG_CMD...