面向过程的编程和函数式编程之间有什么区别?

电脑杂谈  发布时间:2020-07-02 17:05:18  来源:网络整理

面向java开发者的函数式编程_面向过程编程_面向切面编程

不了解函数式编程. 解决.

个人理解: “面向过程”和“面向对象”之间的区别是“封装”. “功能”和“面向对象”之间的区别是“不使用外部状态”. 这三个编程思想真的很模糊.

建议参考我学校草稿中的这篇文章

上面有许和程序语言比较的示例. 只有仔细观察,您才能深刻理解

在谈论函数式编程时,将有很多“函数式”功能. 提及不可变数据,一流的对象和尾部调用优化. 这些是有助于功能编程的语言功能. 提及映射,减少,绘制,递归,弯曲4. 以及使用高阶函数. 这些是用于编写功能代码的编程技术. 提及并行性,惰性计算和确定性. 这些是有助于函数式编程的属性.

忽略所有这些. 功能代码的特性可以用一句话来描述: 避免副作用. 它不依赖或更改当前功能之外的数据. 所有其他“功能性”事物都源自此. 学习时将其用作指导.

过程方法使用状态而不是传递参数. 该方法通过更改外部变量而不是返回值来影响附近的代码. 为了了解该方法的作用,读者必须仔细阅读每一行. 如果找到外部变量,则必须找到它的来源并找出如何修改它.

功能语言中,每个步骤的方法都会生成一个状态,该状态将作为参数直接传递给下一步. 而不是使用全局变量

这是我的理解:

1
coffee
1
2
3
4
5
6
7
8
9
10
11
12
# 函数式
trimLeft = (text) ->
  switch
    when text.length is 0 then text
    when text[0] is ' ' then trimLeft text[1..]
    else text

# 过程式
trimLeft2 = (text) ->
  while (text[0]? and text[0] is ' ')
    text = text[1..]
  return text

功能公式,我将其更改为

1

面向过程编程_面向切面编程_面向java开发者的函数式编程

开关

,因为

1

如果

写起来有点难看

程序编写方式简明扼要. 而且JavaScript的性能更好.

注意代码执行的顺序,

函数编写,通过函数调用参数逐层执行执行过程,

1

文本

复制并以参数形式传递

程序编写,执行过程在

面向过程编程_面向切面编程_面向java开发者的函数式编程

1

同时

一遍又一遍

1

文本

一次又一次地分配和更新

如果您仍然注意到功能写入数据是不变的,那么您可以更好地了解发生了什么

可变数据是许多错误的根本原因,也是并行程序执行的巨大障碍. 函数式编程认为无法修改数据,

在硬件方面,实际上,数据在CPU寄存器存储器中不断更新,这与功能公式完全相反

简而言之,差异非常大. 考虑使用当前的语言,这些变量无法修改您编写程序的方式!

另一点是函数式编程考虑了如何表达该问题的解决方案?存在多少种情况?如何处理每个人?

对于过程代码,您需要找到可以完成任务的执行顺序,然后在代码中表达该执行顺序

面向过程编程_面向切面编程_面向java开发者的函数式编程

简单的过程什么都不是,但是从功能上考虑复杂的过程,可以大大简化问题

%E5%87%BD%E6%95%B0%E5%BC%8F%E7%BC%96%E7%A8%8B

指向@mcfog的链接很有趣.

我最近也在研究函数式编程. 我昨天刚看过一篇文章. 长篇文章后面有一个例子. 主题可以参考

我已经阅读了一本电子书,而且非常详细. 您只需阅读第一章,估计您就会理解它. 其实很简单

措辞: 函数式编程是将一个函数作为参数传递给另一个函数. 由于函数也是js中的对象,因此您经常会在js中看到这种文字.

java面向过程编程,c#也具有lambda措辞,该措辞将匿名对象作为参数. 这实际上是功能编程的思想.

功能: 功能编程非常清晰. 在实际应用中,当您遇到需要某种方法来实现某种类型的功能但每种功能都不完全是阿拉伯胶的情况时,功能编写就非常漂亮. 例如,我有一个计算功能. 加法有四种,减法,乘法和除法. 我可以这样写:

//某种算法,这是计算

函数cal(a,b,fun){

返回乐趣(a,b);

}

面向过程编程_面向java开发者的函数式编程_面向切面编程

//特定算法1,加法

var add = function(a,b){

返回a + b;

}

//特定算法2,减法

var reduce = function(a,b){

返回a-b;

}

然后我可以在使用时使用它:

var result1 = cal(a,b,add); // a + b

var result2 = cal(a,b,reduce); // a-b

var result3 = cal(cal(a,b面向过程编程,add),c,reduce)// a + b-c

封装了函数实现的细节,与特定的函数调用分开,您认为阅读起来非常方便.

关于stackoverflow的讨论

建议您看一下scip,它是计算机程序的构建和解释,可以帮助您理解函数式编程.

面向过程的抽象集中在数据流上,而面向对象的抽象集中在数据模型上


本文来自电脑杂谈,转载请注明本文网址:
https://www.pc-fly.com/a/jisuanjixue/article-265980-1.html

    相关阅读
      发表评论  请自觉遵守互联网相关的政策法规,严禁发布、暴力、反动的言论

      • 太武帝拓跋焘
        太武帝拓跋焘

        你是最棒的小王子

      热点图片
      拼命载入中...