刚在看这篇文章《 Teach Yourself Programming in Ten Years 》( http://norvig.com/21-days.html )时,里面有一段:
学习至少六种编程语言。包括一种强调类抽象的语言(如 Java 或 C ++),一种强调函数抽象的语言(如 Lisp 或 ML 或 Haskell ),一种支持语法抽象的语言(如 Lisp ),一种支持声明性规范(如 Prolog 或 C ++模板) ,以及强调并行性的(如 Clojure 或 Go )。
于是我在想,javascript 到底可以跟哪些编程语言归到一类呀?他即有 class,也支持函数式编程,也有并行性……
弱类型语言, JS的class是基于原型的, 和Java的class不太一样
是ECMA类型的语言。
js还真不好归类,除了动态类型是妥妥的, 至于弱类型,按照有些分法,还真不算,比如他是有typeof运算符的 其他方面嘛: class有,但半残,多态性很差 支持高阶函数,但对lambda支持很差 有一定元编程能力,半残 不支持宏 纯回调 js比较偏实用,糅合了很多好的设计
理论上,所有计算语言的可计算基石要么基于图灵机(声明式、编译型) 要么基于 lambda演算(函数式、解释型) 由于图灵机的计算能力和 lambda 演算的可计算能力是等价的,二者可以相互构造,所以现代编程语言同时支持声明式和函数式,经常是二者的混合。 基于可计算理论基石之上,为了编程理解的方便,才有了所谓的面向对象、原型、类这些概念,说到底他们只是为了你方便组织和记忆代码。 你提到的强调并行比如 map reduce 这一类都是函数式计算的概念,不应单独作为语言特征类别来说。 所以个人建议学一门声明式语言比如 Java、学一门函数式语言比如 Clojure 或者 JavaScript(有点大杂烩、但更好上手)即可涵盖所有编程计算习惯或方式。 不过在一些成熟的领域,基本上都不需要写代码,直接写 SQL 就可以完成开发工作了,比如:https://wuyuan.io SQL 的本质也是函数式的。