当前位置:  开发笔记 > 编程语言 > 正文

为什么C#是一种功能性的编程语言?

如何解决《为什么C#是一种功能性的编程语言?》经验,为你挑选了4个好方法。

有人说C#可以被认为是一种函数式编程语言,尽管它被广泛认为是一种OO编程语言.

那么,什么功能集使C#成为一种函数式编程语言?

我只能想到:

    委托(即使没有匿名方法和lambda表达式)

    关闭

还要别的吗?



1> Juliet..:

例如,C#借用了ML和Haskell的许多功能:

C#2.0为我们带来了参数多态(或"泛型").我听说过F#的创建者之一Dom Syme主要负责在.NET BCL中实现泛型.

C#2.0还允许程序员传递和返回函数作为高阶函数的值,并且对匿名委托的支持有限.

C#3.0和3.5改进了对真正闭包的支持匿名函数.

LINQ可以被认为是C#自己的列表推导的味道.

匿名类型看起来像ML记录的近似值

类型推断是给定的.

我不了解你,但C#扩展方法看起来很像Haskell 类型.

在C#4.0中有很多关于"动态"关键字的讨论.我不是100%确定它的实现细节,但我很确定它会使用结构类型而不是后期绑定来保留C#的编译时间安全性.结构类型大致相当于"静态语言的鸭子打字",这是Haskell和ML黑客多年来一直享受的功能.

这并不是说C#是一种函数式编程语言.它仍然缺少重要的功能,如模式匹配,尾部调用优化,以及列表和元组文字.此外,惯用的C#基本上是必要的,严重依赖于可变状态.

我不一定会认为上面提到的某些功能是函数式编程语言所独有的,但很明显C#开发人员在过去几年中从函数式编程语言中获得了很多灵感.


C#扩展方法与类型类不同.它只是静态方法之上的一种方便的语法.
`dynamic`确实使用后期绑定(而不是结构(子)键入),这就是`dynamic`的全部要点.
哦,我要补充一点,.NET团队正在向.NET BCL添加元组(http://blogs.msdn.com/bclteam/archive/2008/11/04/what-s-new-in-the- bcl-net-4-0-justin-van-patten.aspx)。

2> Adam Wright..:

对于"OO语言","功能语言","程序语言"没有严格的定义,人们可以说任何语言都适合任何分类; 一个人可以编写过程Java,面向对象的C和功能C++.我通常使用基于主要语义特征支持的分类以及常见的开发实践.查看内容和流行框架的一个好方法是查看它们使用的样式.

函数式语言大多被定义为具有第一类函数原语的函数语言,其开发风格使用这些函数来降低像"map"这样的习语的复杂性.另一个常见的功能是模式匹配,但我不认为这是完全功能."纯粹的"功能语言也没有副作用,但这不是强制性的(看看这些概念有多模糊?:).

那么,什么是C#?好吧,它有一流的函数样式原语,带有委托(并且已经获得了对具有匿名委托和lambdas的样式的更好的语法支持).这是否有用?也许,如果一个人写一个功能风格.框架是否使用此样式?不,不是真的.

因此,我不会将C#作为一般性讨论中的功能 - 它充其量只是多范式,具有一些功能性.


+1表示这些区别是多么模糊.

3> Marc Gravell..:

代表和闭包允许它以很大功能的方式运行......例如:

var sum = data.Sum(x=>x.SomeProp);

等等

您可以使用lambdas/delegates编写大多数高阶函数.类型推断与纯函数语言(如F#)并不完全相同,但C#泛型类推理仍然相当不错(特别是在C#3.0中).

在.NET 3.5和C#3.0中尤其如此,其中LINQ对许多问题采用了高功能方法.但是你仍然可以使用C#与.NET 2.0和C#2.0的功能方面.使用C#3.0和lambdas ;-p更容易

实际上,C#是一种实用的编程语言.它旨在使用一些范例成为可能,如果你想做一些与众不同的事情,不要害怕地惩罚你.



4> Bill the Liz..:

函数指针是C#在函数类别中具有的另一个特性.

但是,我不认为C#被广泛认为是一种功能语言.我认为要指出的是,你可以在一个函数式程序是非常重要的风格在许多语言不属于纯粹的功能.

从功能编程:

在计算机科学中,函数式编程是一种编程范式,它将计算视为数学函数的评估,并避免状态和可变数据.它强调功能的应用,与强调状态变化的命令式编程风格形成对比.

使用该定义,您几乎可以使用任何过程语言编写功能样式. 纯功能语言只是强制执行它.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有