首先给出结论,是。为什么?

我们不妨先来从面向对象切入。

当我们将面向对象看作是语言的属性时,c语言是面向对象语言吗?众所周知,c++,java等高级语言都是面向对象语言,而通常我们说c语言是面向过程的。这是因为c++与java对面向对象提供了很好的优化,通过类,成员变数与方法,继承与多态,虚函数与重载等特性,我们就可以很详细的抽象对象的模型。但是c语言中只有结构体,结构体内部不能定义函数,只能有成员变数,于是我们在用c语言抽象对象模型时遇到了很多困难,所以通常我们说c语言是面向过程的。

但是面向对象的提出是为了编程思想更好的演进,而不是作为划分语言属性。换句话讲,面向对象的编程思想是与语言无关的。使用c语言的结构体,结合函数指针,我们也可以在c语言中实现c++中类的各项功能,只不过我们做了很多在其他高级语言中编译器要做的事情,这对开发者而言很不友好,而且维护成本很高。

这里我要说的是,如果你问我c语言是面向对象语言吗?我一样会回答是。因为面向对象是思想,不是划分语言的属性。

最后,我们回到问题上,函数式意味著我们可以将代码打包封装,预留出介面,一个函数可以从介面调用其它函数的返回值,并将自身的返回值作为介面供其他函数调用。这同样是一种设计思想,通过这样的方式,我们很容易的可以将工程模块化,实现模块间的解耦。

无论是语言本身对于函数式编程的支持与优化上还是从编程思想的实现上,c语言显然都是符合这一特点的。


首先,我们先看一下百度百科上是如何定义函数式编程的:

函数式编程是种编程范式,它将电脑运算视为函数的计算。函数编程语言最重要的基础是 λ 演算(lambda calculus)。而且λ演算的函数可以接受函数当作输入(参数)和输出(返回值)。和指令式编程相比,函数式编程强调函数的计算比指令的执行重要。和过程化编程相比,函数式编程里,函数的计算可随时调用。

从上文中我们可以看出,所谓的函数式编程,和面向过程编程、面向对象编程一样,是一种编程的方法、编程的思想。

所以问题的描述并不准确,确切的说,C 语言可以使用函数式编程的方法进行编程。


C是你说的面向对象或者面向函数的高等语言的实现语言。你可以用C进行任何范式的代码类型开发。唯一的区别是,那些语言已经帮你制定了规范,而C语言需要你自己制定规范,比如制定一个定义特定类型函数指针的宏,然后所有具有callback特性的参数都必须用这个宏定义。C还能做的更多,可以实现各种范式的混合开发。当然,学习C语言需要10年以上才能灵活使用它。但高等面向函数式语言只要一周就可以学习完毕,一个月就能实战了。


推荐阅读:
相关文章