编程范式: 函数式、命令式、声明式、面向对象

函数式编程

命令式编程

命令式编程就是冯诺伊曼的指令序列

关注计算机执行的步骤,即一步一步告诉计算机先做什么再做什么。

声明式编程

声明式编程 是以数据结构的形式来表达程序执行的逻辑。

告诉计算机应该做什么,但不指定具体要怎么做。

HTML、CSS、SQL

函数式编程

函数式编程是面向数学的抽象,将计算描述为一种表达式求值

函数式编程是一种编程范式,它将 电脑运算 视为 函数运算,并且 避免使用 程序状态 以及 易变对象。 ——维基百科

不同不体现在符号上,而体现在关系上。

函数式编程起源——λ演算

λ演算(读作lambda演算)由数学家阿隆佐·邱奇在20世纪30年代首次发表,它从数理逻辑(Mathematical logic)中发展而来,使用变量绑定(binding)和代换规则(substitution)来研究函数如何抽象化定义(define)、函数如何被应用(apply)以及递归(recursion)的形式系统。
视频讲解

函数形式

在这里插入图片描述
代换规则
在这里插入图片描述

左式 – 柯里化等于 --> 右式
在这里插入图片描述

对应js中写法
在这里插入图片描述

可以通过函数来定义数字
并在此基础上定义 运算法则
但一切都是基于函数的!
在这里插入图片描述

在这里插入图片描述

图灵机

图灵机 是建立在数据和指令之上的

冯诺依曼架构 是对图灵机的物理实现

编程发展 是在一步步限制图灵机的指令自由度,同时不减少其解决问题的能力
goto 被弃用 转而用结构化编程保障其能力
封装工具函数
面向对象 管理数据与函数
函数式编程 限制了图灵机破序的能力

函数式编程范式特点

参考文章 上
参考文章 下
在这里插入图片描述

  • 函数是 第一等公民
  • 函数是纯函数(相同的输入总会得到相同的输出,并且不会产生副作用)

通常需要封装以下函数以提高开发效率

  • 函数合成(compose)将不同函数拼接成新的函数
  • 函数柯里化(Currying)又称部分求值,通过闭包的方式提前存入一些函数参数值,返回新的函数以备后续调用
function sum(a, b) {
    return a + b
}
function sumCurry(x) {
    return function(y) {
        return sum(x, y)
    }
}
const sum25 = sumCurry(25)
sum25(2) // 27
  • 高阶函数
    1. 函数作为参数被传递(回调函数),将多个类似的函数中变化的部分抽离,从而达到封装的目的。
    2. 函数作为返回值输出,意味着运算过程延续到之后执行
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
JS 函数式编程指南 中文版 This is the Simplified Chinese translation of mostly-adequate-guide, thank Professor Franklin Risby for his great work! 关于本书 这本书的主题是函数范式(functional paradigm),我们将使用 JavaScript 这个世界上最流行的函数式编程语言来讲述这一主题。有人可能会觉得选择 JavaScript 并不明智,因为当前的主流观点认为它是一门命令式(imperative)的语言,并不适合用来讲函数。但我认为,这是学习函数式编程的最好方,因为: 你很有可能在日常工作中使用它 这让你有机会在实际的编程过程中学以致用,而不是在空闲时间用一门深奥的函数式编程语言做一些玩具性质的项目。 你不必从头学起就能开始编写程序 在纯函数式编程语言中,你必须使用 monad 才能打印变量或者读取 DOM 节点。JavaScript 则简单得多,可以作弊走捷径,因为毕竟我们的目的是学写纯函数代码。JavaScript 也更容易入门,因为它是一门混合范式的语言,你随时可以在感觉吃力的时候回退到原有的编程习惯上去。 这门语言完全有能力书写高级的函数代码 只需借助一到两个微型类库,JavaScript 就能模拟 Scala 或 Haskell 这类语言的全部特性。虽然面向对象编程(Object-oriented programing)主导着业界,但很明显这种范式在 JavaScript 里非常笨拙,用起来就像在高速公路上露营或者穿着橡胶套鞋跳踢踏舞一样。我们不得不到处使用 bind 以免 this 不知不觉地变了,语言里没有类可以用(目前还没有),我们还发明了各种变通方法来应对忘记调用 new 关键字后的怪异行为,私有成员只能通过闭包(closure)才能实现,等等。对大多数人来说,函数式编程看起来更加自然。 以上说明,强类型的函数语言毫无疑问将会成为本书所示范式的最佳试验场。JavaScript 是我们学习这种范式的一种手段,将它应用于什么地方则完全取决于你自己。幸运的是,所有的接口都是数学的,因而也是普适的。最终你会发现你习惯了 swiftz、scalaz、haskell 和 purescript,以及其他各种数学偏向的语言。 ---------------------------------------------------- 本 PDF 基于开源文档,目录书签齐全。 版权归原作者,翻译版权归译者。 ----------------------------------------------------
### 回答1: Ocaml旨在提供一种统一的、易于学习的编程语言,支持函数式编程面向对象编程。它具有函数语言的快速开发能力,而面向对象编程则可以构建大型程序。Ocaml支持这两种编程方法,使它成为一种强大和灵活的开发语言。 ### 回答2: Ocaml同时支持函数式编程命令式编程的特性,主要是为了提供更广泛的编程范式选择和更灵活的开发方。 首先,函数式编程强调函数的纯粹性和无副作用,使得代码更容易理解和维护。它遵循数学函数的概念,将计算视为函数之间的转换,对数据进行操作而不改变其状态。函数式编程具有丰富的工具和抽象机制,如高阶函数、匿名函数、惰性求值等,可以编写简洁、优雅的代码。通过支持函数式编程,Ocaml能够满足一些对纯函数、数据不可变性和并发处理有特殊需求的场景。 但是,函数式编程并非适用于所有场景,一些问题更适合使用命令式编程来解决。命令式编程更加注重计算的顺序和状态的变化,适用于需要对可变状态进行频繁修改的场景。支持命令式编程使得Ocaml可以处理一些与输入/输出相关的任务、复杂的迭代和底层系统编程。 通过同时支持函数式编程命令式编程,Ocaml在开发过程中提供了更多的灵活性和可选择性。开发者可以根据问题的特点和需求自由选择合适的编程范式,从而更好地应对各种场景。此外,Ocaml还提供了良好的互操作性,可以将函数风格和命令式风格的代码结合使用,使得开发更加便捷。总之,Ocaml同时支持函数式编程命令式编程,旨在提供多种编程的选择,以满足不同开发需求。 ### 回答3: Ocaml被设计为一种多范式编程语言,即它既支持过程编程也支持函数式编程。这是出于多方面的考虑。 首先,函数式编程具有简洁、高度抽象和表达能力强的特点。通过使用函数和高阶函数,可以更容易地表达复杂的数学和逻辑概念,同时也能提高代码的可读性和可维护性。因此,作为一种现代编程范式函数式编程被广泛应用于许多场景,如科学计算、人工智能、大数据等领域。Ocaml作为一种面向函数式编程的语言,能够提供丰富的函数式编程特性,方便开发者使用这一范式。 其次,过程编程也是一种常用的编程范式。通过使用过程、状态和控制流等概念,可以更直观地描述问题和解决方案。尤其在底层系统编程、嵌入系统开发、网络编程等领域,过程编程更为适用。Ocaml作为一种多范式语言,不仅支持函数式编程的特性,还具备强大的过程编程能力,使得开发者能够更灵活地选取合适的编程风格。 最后,多范式的设计使得Ocaml具备了更广泛的应用场景和更高的灵活性。开发者可以根据问题的性质和需求,自由选择使用函数式编程或过程编程的方,充分发挥Ocaml的优势。这可以使得Ocaml成为一个适用于多种场景的通用编程语言,既能应对复杂的科学计算问题,也能应对底层系统的需求。 综上所述,Ocaml同时支持函数式编程和过程编程,既是因为函数式编程的优雅和表达能力强,也是因为过程编程的实用性和直观性。同时,多范式设计也增加了Ocaml的灵活性和适用性,使其成为一种广泛应用的通用编程语言。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值