使用哪种,C#还是F#?在这个“现实世界”的案例中

时间:2010-08-23 00:24:27

标签: c# f#

我已经在stackoverflow上阅读了几个有趣的C#/ F#比较。所以,首先,感谢所有贡献者!

对于F#有很多赞誉,更喜欢C#的原因有点困难。无论如何,我仍然不确定应该选择哪个小而简单的“真实应用程序”:模拟鲱鱼学校。

我不知道函数式编程(但是),但从OO的角度来看,一些设计似乎很简单:创建一个Fish类,并从中派生出这些类:Herring,Predator,Prey。每个都应该具有位置,方向和速度等属性。

将会有很多遍历集合:每个小时间增量,每个Fish-object将检查其环境并更新其行为。

我还不知道这是否足够CPU,我会关心多处理,但也许,所以F#听起来不错。

我相信我会花很多时间进行原型设计和探索 - 我听说F#对此有好处。

根据我的阅读,C#更适合GUI,但不会有太多。绘制一些曲线会很好,但我希望将大部分结果发送到打开的Excel工作表或数据库。不确定C#和F#在Excel /数据库方面有何不同。

无论如何,这个项目看起来是如此面向对象 - 尽管上面提到的F#有利于C#,但是对于这个项目来说C#会更好吗?或??

编辑:只是想对所有评论表示感谢,非常有用和有趣,希望它也可以帮助其他人。我觉得有趣的事情之一就是虽然F#是多范式的,但每个人似乎更喜欢C#的OO方法,尽管例如this comparison。 (顺便说一下,我将学习F#。)

4 个答案:

答案 0 :(得分:14)

没有理由不能在F#中编写算法代码,并且仍然在C#中使用GUI。只需将算法放在用F#编写的库中,然后用C#编写GUI应用程序,引用该库。

答案 1 :(得分:4)

这听起来像是可以使用这两种样式编写的应用程序。使用F#似乎是合适的,这可能是学习F#语言和函数式编程的一个很好的应用程序。

关于架构,您写道:

  

我不知道函数式编程(但是),但从OO的角度来看,一些设计似乎很简单:创建一个Fish类,并从中派生出这些类:Herring,Predator,Prey。每个都应该具有位置,方向和速度等属性。

功能编程并非完全不同。它强调使用具体类型(并且您不经常使用继承),因此您可能会定义具有类似属性的不同类型,例如HerringPredator。然后你将创建鲱鱼列表和捕食者列表,并分别对这两种类型进行逐步模拟。

巧合的是,我用“动物”和“捕食者”作为我的函数式编程书的样本(在C#和F#中)编写了类似的模拟。 source is freely available(寻找第14章),因此您可能会发现这是一个有用的灵感(示例也展示了并行性)。使用F#中的Excel也是完全可能的(与C#完全相同),我的书中也提供了示例(参见第13章的源代码)。

一般来说,使用函数式编程来解决F#中的问题需要稍微不同的观点,你可能需要花费更多的时间进行实验,但似乎问题可以很好地从一些F#特性中受益(并且它是一个学习新东西的好机会。

答案 2 :(得分:3)

我在围栏。

如果(正如你在编写问题的方式所暗示的那样)你想要一个面向对象的模拟解决方案,那么当然C#将是更好的工具,因为它本质上是OO。

但是,如果你愿意考虑功能性解决方案,那么你会发现F#会更好 - 因为它本质上是功能性的。

答案 3 :(得分:3)

这听起来是一个很好的机会来尝试这两种方式,无论是通过混合它们还是通过两种语言完成整个事情,这样你就可以体验它们并学习功能和OO编程之间的所有差异。顺便说一句,你可以在F#中做OO,因为它是一种混合语言,你可以在C#中进行函数式编程,当然也有局限性。

此外,您不应该使用任何一种语言进行数据库访问或Excel集成时遇到任何实际问题。