一句话说说:命令式,声明式,函数式和面向对象编程

它们都是一种编程范式,或风格。它们都很棒,可以针对不同场合解决问题。

命令式编程,你关心的是“问题是怎么解决的”。程序按照你写下的步骤一步一步地来运行。显著的特点就是你会写下很多变量定义、赋值语句、遍历循环语句,来改变程序的一些状态参数。

声明式编程,你关心的是“要做什么”,而不关心“要怎么才能做到”。例如你写的SQL语句,能帮你获取到数据,而数据获取是如何实现的,一点都不关心(尽管可能你觉得写SQL语句不算编程,但它确实就是)。网页编程中用到的HTML 和CSS 也都属于声明式编程,它们要做的是展现内容,而不关心要怎么才能实现展示的过程。

函数式编程是声明式里面最火的一种编程范式。它关心的也是“What is to be done”,而不关心“How is it to be done”。它关心的是,什么作为输入,提供什么输出。函数是一等公民!举个例子,我不需要关心要怎么使用For循环来遍历一个数组,然后对它们做什么事情,我只需要用map(),reduce(),filter()…那些脏活交给它们就能完成并得到我想要的结果。

函数式编程里的技巧:纯函数(没有side-effects),高阶函数(输入或输出是一个函数);闭包;Immutability(Non-Mutable Data),不改变状态,就没有bug(大型应用中出现不知道在代码哪里,这个值被mutate了的bug),所以往往你的函数返回的是一个状态的副本。

面向对象编程可以说是命令式里面的主流了。它不仅关心要做什么,也关心要怎么做,更是以一种模拟现实世界模型以及它们之间关系的一种方式,来解决问题。

OOP特点:

  1. Everything is an Object.
  2. Each Object contains Some Data Fields and Methods.
  3. OOPs Concepts: Abstraction,Encaspulation,Inheritance and Polymorphism

FP和OOP之间PK


本作品采用《CC 协议》,转载必须注明作者和本文链接
《L02 从零构建论坛系统》
以构建论坛项目 LaraBBS 为线索,展开对 Laravel 框架的全面学习。应用程序架构思路贴近 Laravel 框架的设计哲学。
《G01 Go 实战入门》
从零开始带你一步步开发一个 Go 博客项目,让你在最短的时间内学会使用 Go 进行编码。项目结构很大程度上参考了 Laravel。
讨论数量: 2

命令式:西红柿炒鸡蛋,先炒鸡蛋,再炒西红柿,最后两个一起炒。

声明式:老板,来个西红柿炒鸡蛋。

函数式:打开美团,下订单,小哥取餐,餐厅炒鸡蛋。

对象式:鸡蛋打碎、搅拌、放盐,西红柿洗净、切好备用,锅加热、放油、放鸡蛋、放西红柿,使用铲子翻炒,使用盘子盛菜。

1年前 评论

有没有一种可能,四个结合起来的? :flushed:

1年前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!