好代码的特征:正确,高效,简洁,易读,可维护性
软件企业为什么需要好代码?任何一个软件,他的可维护性、性能、安全、架构都是从代码中体现。它是好软件最后一步,是基础。软件开发其他工作其实都是为他准备的。
好代码的特征 | 描述 | 实现方法 |
正确性 | 代码应当正确处理所有预期输入(expected input)和非法输入(unexpected input) | 通过使用单元测试(Unit Test)和契约编程的方式来验证。 |
高效 | 代码要尽可能的高效运转。 | 了解算法的渐进时间(大O技法)。优化往往是最后一步,前提你必须对基本的数据结构和算法有一定的料及。 |
简洁 | 可以用10行表示就不要用100行表示 | 合理Extract Method,熟练的利用重构里面的原理,改造自己的代码。 第一次编写完成之后,建议自己review一下代码。可以让代码更简洁。 |
易读 | 代码是不同开发人员交流的工具,编写易读的代码是非常重要的。 | 遵守共同的开发规范。 变量命名要能体现意义。 思考如何用最少的注释,就可以表达清楚代码中的概念。 |
可维护性 | 在产品生命周期中,代码经过恰当的修改就能应对需求的变化 | 满足之前四个条件,关键业务代码逻辑清晰,架构合理。就可以满足可维护性要求。 |
数据结构的合理应用
瑞士计算机科学家,尼古拉斯·沃斯(Niklaus Wirth,1934年2月15日—)说过:
“程序=数据结构+算法”
实现一个函数,如果参数可以使用数据结构定义,那么就使用数据结构定义。
例如
Int Distance(int x1,int y1,int x2,int y2)
改进为
struct Point{
int x,
int y
}
int Distance( Point & p1,Point & p2)
恰当的重用代码和模块化代码
其实就是《重构》ExtractMethod。
将函数中过长的代码提炼出来,然后组织在一起并独立到一个新的独立方法中,并让方法名称解释该方法的用途.该方法最好之处是有效的减少了方法中的代码.
典型的例子有很多:
1,文件保存到临时目录中,生成临时名称。我们都需要一个统一的类和对应的方法来完成这个。而不是将代码copy的到处都是。
2,主业务过程简化,原来150行业务描述过程,通过模块化代码。简化为10行。
灵活、健壮
灵活健壮的代码在于,你可以灵活的使用参数。而不是将代码写死。
但是也要注意一点:习惯约定大于配置。
注意配置文件的位置,注意代码规范,注意在数据层、业务层编码方式统一。
典型的例子有很多:
1,Spring IOC方法,将类灵活的注入。反例,Spring的Annotation方法,将代码写死。
2,数据库的配置文件,都写到xxx.property
错误检测
对应的输入,是否进行了参数检查。有无if判断。
使用单元测试和模块化代码可以在编码阶段发现一部分问题。
采用代码复查的方式和方法,可以解决另外一部分问题。
编程方法采用契约编程理念。
编程小工具
以下是从别的地方找的一些好的总结。
写好代码要掌握的基本数据结构、算法和概念
数据结构 | 算法 | 概念 |
链表 | 广度优先搜索 | 位操作 |
二叉树 | 深度优先搜索 | 单例设计模式 |
单词查找树(trie) | 二分查找 | 工厂设计模式 |
栈 | 归并排序 | 内存(堆和栈) |
队列 | 快速排序 | 递归 |
向量/数组列表 | 树的插入/查找等 | 大O时间 |
散列表 |
|
|
更深一些的:
数据结构:图,B树,矩阵
算法:动态规划,贪心
概念:企业应用架构模式,面向模式的软件体系结构。
2的幂表
2的幂 | 准确值 | 近似值 | X字节转换为MB,GB等 |
7 | 128 |
|
|
8 | 256 |
|
|
10 | 1024 | 1K | 1K |
16 | 65536 | 6.4W | 64K |
20 | 1048576 | 100W | 1MB |
30 | 1 073 741 824 | 10.7B | 1GB |
32 | 4 294 967 296 |
| 4GB |
40 | 1 099 511 627 776 | 1T(万亿) | 1T |
50 |
|
| 1P |
60 |
|
|
|