美文网首页
面向对象编程和函数式编程、命令式编程和声明式编程

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

作者: cclucc | 来源:发表于2019-11-15 19:46 被阅读0次
我们有两种编程方式:命令式和声明式

命令式编程:命令“机器”如何去做事情(how),这样不管你想要的是什么(what),它都会按照你的命令实现。 声明式编程:告诉“机器”你想要的是什么(what),让机器想出如何去做(how)。 举个简单的例子,假设我们想让一个数组里的数值翻倍。

var numbers = [1,2,3,4,5]
var doubled = []
for(var i = 0; i < numbers.length; i++) {
  var newNumber = numbers[i] * 2
  doubled.push (newNumber)
}
console.log (doubled) //=> [2,4,6,8,10]

/*--声明式---*/
var numbers = [1,2,3,4,5]
var doubled = numbers.map (function (n) {
  return n * 2
})
console.log (doubled) //=> [2,4,6,8,10]


java是面向对象
scala是面向对象和函数式的结合


面向对象编程

https://www.zhihu.com/question/19729316#231973

面向对象编程强调的是对象和消息. 比如:门被风关上了,门是个对象,风是个对象,关是个动作我们定义为方法.则门对象应该有一个关方法:guan(Feng weifeng)

函数式编程

函数式编程关心数据的映射。
把逻辑完全视为函数的计算。把数据与逻辑封装到函数中,通过对函数的计算,加工,处理,来生成新的函数,最后拼装成一个个功能独立的函数。在运用这些函数,完成复杂逻辑的实现。

面向对象函数和函数式编程差异
函数式编程特点
  1. 函数是一等公民
  2. 纯函数

函数式编程中我们把数据和逻辑封装到函数中而不是类与对象中。每个函数完全独立,好的函数式设计,每个函数都是一个纯函数(pure function,即输入固定参数,即可得到相同输入的函数)。
面向对象中的任何一个原型方法(prototype)都会获得this的数据,而且可以轻易获取闭包的数据。这样的非纯函数让我们非常难以提炼与抽象。
纯函数由于输入与输出固定,所以变得非常容易单测。好的函数式中的函数设计,不会依赖于任何其他函数或者声明配置,只需要传递参数,既可以进行测试。而在面向对象语言中,我们往往需要启动整个工程,或者说所有依赖的类全部要加载,才能开始测试。

  1. 模式匹配
    map reduce filter等
  2. immutability

什么是immutability? 实细分起来有语法上的 immutable (例如 Java 里的 final 关键字), 和运行时对象的 immutable (一个变量名可以修改指向不同对象, 但对象的内容不可变). 两者的联系是: 如果语法上规定所有变量都是 "final" 的, 那么运行时对象就相当于都 immutable 了. 但如果语法上部分变量是 final, 部分不是, 那么就不能得出运行时对象全都 immutable 的结论.

immutability优点?
1)、运行速度。并发下,很多地方说immutability会拖慢程序,其实并没有。应用了 immutability 的 VM 实现可以去掉很多情况的 lock, 并发处理速度会更快. 不是并发处理的情况, 如果所有对象都 immutable, 手动的保护性拷贝都可以去掉,处理复杂业务会更简单快速.
2)、gc。因为只有新对象指向老对象, 老对象不能指向新对象, 对实现分代 GC 的人来说真是一个天堂。没有环引用! 不用做环检测不用加弱引用, 那引用计数还不爽翻了?

相关文章

  • RxJava系列|RxJava简介(一)

    函数响应式编程 函数式编程是一种编程范式。 常见的编程范式有:命令式编程、函数式编程和逻辑式编程。 面向对象就是一...

  • 你真的理解面向对象吗?

    面向对象 我们常见的编程范式有命令式编程,函数式编程,逻辑式编程,而面向对象编程是一种命令式编程。 命令式编程是面...

  • Rxjava总结

    概念 函数式编程就是一种编程范式,常见的编程范式有命令式编程 函数式编程 和逻辑式编程。。。常见的面向对象编程是一...

  • RxJava2

    函数式编程是一种编程范式。我们常见的编程范式有命令式编程、函数式编程和逻辑式编程。我们常见的面向对象编程是一种命令...

  • 函数响应式编程概述

    什么是编程? 面向过程 vs 面向对象 命令式编程 vs 函数式编程 函数响应式编程 满足函数式的一些特性 面向离...

  • python面向对象1

    编程思想 编程思想:面向过程编程(穷人思想)、函数式编程、面向对象编程(富豪) 面向过程编程: 算法和逻辑 函数式...

  • 编程范式

    主要的编程范式有三种:命令式编程,声明式编程和函数式编程。

  • 编程范式:命令式编程(Imperative)、声明式编程(Dec

    主要的编程范式有三种:命令式编程,声明式编程和函数式编程。 命令式编程: 命令式编程的主要思想是关注计算机执行的步...

  • 编程范式:命令式编程(Imperative)、声明式编程(Dec

    主要的编程范式有三种:命令式编程,声明式编程和函数式编程。 命令式编程: 命令式编程的主要思想是关注计算机执行的步...

  • 函数式编程

    主要的编程范式有三种:命令式编程,声明式编程和函数式编程。 命令式编程: 命令式编程的主要思想是关注计算机执行的步...

网友评论

      本文标题:面向对象编程和函数式编程、命令式编程和声明式编程

      本文链接:https://www.haomeiwen.com/subject/monkuctx.html