JavaScript
基于原型和头等函数的多范式语言
面向过程
例子
// 数据
export var car =
meter:100,
speed:10,
};
// 算法
export function advanceCar(meter){
while (car meter){
car.meter +car.speed;
}
}
问题
数据与算法关联弱
不利于修改和扩充
不利于代码重用
面向对象
特点
封装 继承 多态 依赖注入
例子
class Car {
meter = 100
speed = 100
advance(meter){
while (this.meter < meter){
this.meter +this.speed;
}
}
getspec(){
return `meter:${this.meter};speed:${this.speed}`;
}
}
function main(){
var car new Car();
car.advance(1000);
}
问题
面向对象编程语言的问题在于,它总是附带着所有 它需要的隐含环境。你想要一个香蕉,但得到的却 是一个大猩猩拿着香蕉,而且还有整个丛林。
函数式
特点
函数是“第一等公民
纯函数/无副作用
高阶函数/闭包
例子
function retirePerson(p){
const retireAge = 60;
if (p.age > retireAge){
return{
...P
status:'retired',
}
}
return p;
}
响应式
特点
异步/离散的函数式编程
数据流
操作符
过滤
合并
转化
高阶
例子
const fromEvent,map } = rxjs;
const clicks = fromEvent(document,'click')
const positions = clicks.pipe(
map(ev => ev.clientx),
map(clientx => ++clientx)
转化操作符
positions.subscribe(x => console.log(x));
总结
编程范式是编程学习的重要组成部分,可分为命令式、函数式(属于声明式)、面向对象等多种范式。js 是一种动态语言,它支持多种范式,具体选择哪种范式,根据业务需求和个人风格做选择。编程范式没有绝对的好坏之分,只有合适和不合适。
在学习编程范式时,可以先了解一下各种范式的基本概念和特点,然后通过实践来加深理解。例如,命令式编程是一种以计算机执行的命令为中心的编程方式,它的特点是易于理解和调试;函数式编程则是一种以函数为中心的编程方式,它的特点是代码简洁、可读性强、易于维护等;面向对象编程则是一种以对象为中心的编程方式,它的特点是代码复用性高、易于扩展等。