编程语言
发展历程:汇编 -> c、c++ -> 高级语言
JavaScript:基于原型和头等函数的多范式语言,具有过程式,面向对象,响应式、函数式等特点
编程语言分为:
- 机器语言
- 汇编语言
- 中级语言(面向过程语言,如C)
- 高级语言
- 高级语言具有面向对象代表C++
- 函数式代表lisp
- 多范式代表JavaScript
编程范式
面向对象编程特点:
封装、继承、多态、依赖注入等
封装:
将数据和算法分隔开,不直接修改数据
多态:接口复用。
依赖注入:
这个给我的启发很大,给我种“原来js还能这么玩啊”的感觉。
面向对象编程的五大原则:
- 单一职责原则
- 开放封闭原则
- 里式替换原则
- 依赖倒置原则
面向对象缺点:
总是附带着所有它需要的隐含环境。
你想要一个香蕉,但得到的却是一个大猩猩拿着香蕉,而且还有整个丛林
这个表达的很抽象,但是很贴切。在面向对象编程中,要想用一个工具,那可能先要new出这个对象,然后再调用这个工具,这个对象可大可小,也是真能有带出“整个丛林”的效果。
函数式编程:
不能依赖外部环境,应当把要用的封装在函数内部
优势:
可缓存、可移植、可测试、可推理、可并行。
个人认为闭包很有用,很能体现函数式编程。
a.b != null ? (a.b.c != null ? (a.b.c.d != null ? {a.b.c.d.e : null): null) :null
new Maybe(a).map(prop('b')).map(prop('c')).map(prop('d')).map(prop('e'))
class Maybe{
constructor(x){
this.$value = x;
}
map(fn){
return this.$value == null ? this : new Maybe(fn(this.$value));
}
}
我感觉很神奇,竟然能这么写
去除嵌套:
[1, 2].flatMap(() => ([1, 2]))
特定领域语言
-
语言运行:(创造DLS)
-
词法解析器
-
语法解析器 (语法树,树状结构)
-
遍历
-
执行