声明式:声明式编程(Declarative programming),与指令式编程相对立。它描述目标的性质,让计算机明白目标,而非流程。声明式编程告诉计算机需要计算“什么”而非“如何计算”。
函数式
https://it.wenda123.org/
逻辑式
指令式:指令式编程(Imperative programming),是一种描述计算机所需做出行为的规范。几乎所有计算机硬件工作都是指令式的。指令式编程就是用一行行代码告诉计算机如何计算。
结构化
过程式
面向对象
非结构化
元编程:元编程(Meta programming),指编写的程序会编写或操作的目标还是程序(包括自己),或者在运行时完成部分本该在编译时完成的工作。
泛型
反射
关于面向对象和过程式编程并不是这篇文章的重点,这里举个例子供大家参考。
// 面向对象
人.吃(饭)
鸟.吃(虫子)
// 过程式
吃(人, 饭)
吃(鸟, 虫子)
回到主题,声明式注重What to do,而指令时在乎How to do。比如前端的HTML,CSS这种领域特定的语言(Domain specific language)就是声明式的,大多数情况下我们并不需要关心一个背景色是如何被显示出来的。而我们在使用JavaScript编写逻辑判断、循环等时显然就是用指令式的方式告诉浏览器如何处理问题。SQL是哪种范式,Java又是哪种范式,相信你已有了自己的判断,所以当我们学习一种新的语言时,观察其特点就可大体将其分类,参考过往的经验做到举一反三。
场景
显然编程范式是程序员看待问题的方法与角度,无所谓对错,所以很多问题可能换个角度便会豁然开朗。编程语言遵循编程范式,为程序开发者提供定于和解决问题的工具,当然掌握的工具越多越便于解决问题。
函数式编程通过函数,来描述变量之间的关系。它采用一套固定的算法,以从这些关系中得到结果。常被应用在数据处理及人工智能等领域。
是程序大多逃不过对数据的处理,在JavaScript的世界里也有很多像Array.prototype.map, Array.prototype.filter这样的api。所以在处理数据时,使用函数式的编程思想尤为合适。
让我们思考一个小问题,将一个数组中的最后一个元素大写。假设log, head, reverse, toUpperCase函数都已经存在了。