在搞清楚如何写好代码之前,要搞清楚下面的几个概念,这能够帮我们更好的从不同的方向来写好代码。这一切都是建立在面向对象的基础上。
举个例子,分别使用2种方式构建一个汽车类:
// 面向对象编程
class Car(var brand: String, var model: String) {
var speed: Int = 0
fun accelerate(amount: Int) {
speed += amount
}
fun brake(amount: Int) {
speed -= amount
}
}
// 使用
val myCar = Car("Toyota", "Camry")
myCar.accelerate(20)
println("Current speed: ${myCar.speed}")
在这个例子中,我们创建了一个 Car
类,该类有 brand
、model
和 speed
属性,以及 accelerate
和 brake
方法。每个汽车对象都是 Car
类的一个实例。
// 面向过程编程
data class Car(val brand: String, val model: String, var speed: Int)
fun accelerate(car: Car, amount: Int) {
car.speed += amount
}
fun brake(car: Car, amount: Int) {
car.speed -= amount
}
// 使用
val myCar = Car("Toyota", "Camry", 0)
accelerate(myCar, 20)
println("Current speed: ${myCar.speed}")
在这个例子中,我们使用了一个简单的数据类 Car
来存储汽车的属性。然后,我们定义了两个函数 accelerate
和 brake
,这些函数接受一个汽车对象和一个数值,并相应地改变汽车的速度。
面向对象的四大特性:封装
、抽象
、继承
、多态
设计原则是指导我们代码设计的一些经验总结。
设计模式是针对软件开发中经常遇到的一些设计问题,总结出来的一套解决方案或者设计思路。 参照Design Patterns里面的分类
常用的有:单例模式
、工厂模式
(工厂方法和抽象工厂)、建造者模式
。 不常用的有:原型模式。 2. 结构型
常用的有:代理模式
、桥接模式
、装饰者模式
、适配器模式
。
不常用的有:门面模式、组合模式、享元模式。 3. 行为型
常用的有:观察者模式
、模板模式
、策略模式
、职责链模式
、迭代器模式
、状态模式
。
不常用的有:访问者模式、备忘录模式、命令模式、解释器模式、中介模式。
设计原则提供了通用的设计方向和准则,而设计模式则是这些原则的具体应用。
编程规范主要解决的是代码的可读性问题。
相对于设计原则、设计模式,更加具体、更加偏重代码细节。即便你可能对设计原则不熟悉、对设计模式不了解,但你最起码要掌握基本的编码规范,比如,如何给变量、类、函数命名,如何写代码注释,函数不宜过 长、参数不能过多等等。
大多数的重构,是为了满足新的需求,以及维护成本的问题。对于重构,应该了解以下问题:
重构的目的(why)、对象(what)、时机(when)、方法(how);
保证重构不出错的技术手段:单元测试和代码的可测试性;
两种不同规模的重构:大重构(大规模高层次)和小重构(小规模低层次)。
面向对象是武器,设计模式是招式,设计原则是心法 以心法为基础,以武器运用招式应对复杂的编程问题
可以看出来这些点都是相互关联的,是针对项目开发层级以及阶段的不同规则,这也就是低级程序员和高级程序员的区别维度,像小白应该是只在代码实现的代码规范做起,而高级程序员是从项目的架构,代码原则来思考问题。
这也与我前几天代码被review得到了充分体现,第一次被review了2个小时,在改好了之后,第二天又review2个小时,我在想为什么不一起说了,前面我还在想,为什么不一起说了,影响我提测进度,现在看来,正好是与这些流程点契合,首先对我的代码原则进行了修正,后面又对我的代码规范做了修正。
好,在总结完这篇文档,结合我前面工作中遇到的事情,我理解了为什么,一个代码设计要有这么多概念,以及这些概念是针对那个流程的指导方针。前一段时间我学习完了代码整洁之道,对基本的编程规范有了一定的认知,现在,要进入第二阶段,要正式开始设计原则的学习了。