有一个很不错的概念叫做“Unknown Unknown”,意思是如果你不知道一个东西的话,你也不会知道你自己不知道它。
众所周知大家所熟悉的主流编程思想还是面向对象编程,然而,并不是只存在于这一种方式。我们要习惯去怀疑生活工作中的一些既定的理论和方法,没有确凿理论依据的出现,我们还是要相信有其他的情况,只是我们还没有发现它。
面向对象OOP
面向对象的编程思想最大的特色就是可以编写自己所需的数据类型,以更好的解决问题。“类”就是描述了一组有相同特性(属性)和相同行为(方法)的集合。
抽象成了其中最重要的问题。例如,如果有一个问题“砖头有多少用途?”在我们刚拿到题目后,便会直接简单的根据大脑中最常见的思维方式去思考,决定能够盖房子,砸人。。。我们却可以系统的去从砖头的各个属性去抽象,“长方体,有棱角,坚硬的,有一定体积,有一定质量等”,有同样属性的相关的物体作用便都是砖头的用途,然而,我们又不能仅限于本身,我们可以进行一些“操作”修改的行为,(大小可以调整,固体可以变为粉末,棱角可以打磨,形状可以改变等),对于如何进行编程,不同的语言语法不同,但是思想即如此,大家要学习的还是编程背后的思考方式,而不是语言本身。
函数式编程FP
丘齐,和图灵同时代的天才,从一种抽象角度提出了lambda算子的思想,当时图灵的抽象设计倾向于硬件性,他则从数学角度抽象,其中体现出来的抽象美开出了函数式编程语言这朵花。虽然本质源于lambda算子理论的抽象方式所出现的一些语言(Lisp,Scheme,Haskell。。。)由于抽象方式不符合人的思维习惯无法成为主流的编程语言,但这些却依然活跃在计算机科学界。Swift 引入了泛型和函数式编程的思想,也极大地扩展了设计的空间。
函数式编程是面向数学的抽象,在使用的时候的特点就是,你已经再也不知道数据是从哪里来了,每一个函数都是为了用小函数组织成更大的函数,函数的参数也是函数,函数返回的也是函数,将计算描述为一种表达式求值,函数式程序就是一个表达式。
更多的讨论内容
用递归的思想结合算子去理解。
特点
面向对象:
- 数据和对数据的操作紧紧耦合
- 对象隐藏它们操作的实现细节,其他对象调用这些操作只需要通过接口。
- 核心抽象模型是数据自己
- 核心活动是组合新对象和拓展已经存在的对象,这是通过加入新的方法实现的。
函数编程:
- 数据与函数是松耦合的
- 函数隐藏了它们的实现,语言的抽象是函数,以及将函数组合起来表达。
- 核心抽象模型是函数,不是数据结构
- 核心活动是编写新的函数。
- 变量缺省是不变的,减少可变性变量的使用,并发性好
网友评论
Swift 引入了泛型和函数式编程的思想,极大地扩展了设计的空间。
我的意思是swift其设计有引入这样的思想!表达上是有点不合适。。