您是否应该同时使用C#和F#


16

我知道您可以在同一个项目中一起使用C#和F#,但是我不确定这样做是否是个好主意。

在我看来,将两种截然不同的编码样式(功能性与OOP)混合使用可能会导致设计缺乏凝聚力。它是否正确?


1
您如何在同一项目中使用它们?您是说相同的解决方案吗?
Bryan Boettcher

2
不是Microsoft的项目定义,而是更笼统的定义
Tom Squires 2012年

一个明显的缺点是,如果项目的至少一部分工作要求开发人员与C#和F#的两个部分进行交互(甚至只是阅读它们),那么这些部分将需要开发人员精通两种语言,并且它们比仅使用一种语言的知识要少,因此很难找到它们,可能更昂贵,而且它们的种类也更少(在这种特定情况下,尽管大多数F#开发人员也至少对C#有所了解) 。
gbr

绝对。例如,将F#逐步引入到旧的C#解决方案中是有效的方案。
KolA

Answers:


23

只要适当地使用每种语言并且它们一起“玩得很开心”,那么在产品中混合语言就没有什么错。

如果项目中的某些部分最好使用功能语言进行编码,则可以使用F#对其进行编码。对于C#同样如此。

为此(最好)是混合语言。


0

在我看来,将两种截然不同的编码样式(功能与OO)混合使用可能会导致设计缺乏凝聚力。那是对的吗?

我认为您不会“缺乏凝聚力”。每种语言都有优点和缺点。将它们结合在公共语言运行时上,可以使您更接近两全其美。使用C#和F#,您只需要确保在解决方案中的两种语言之间的接口处使用两种语言的交集即可。


0

是的,我同意ChrisF的观点。同样,C#当前已经结合了F#原则,例如匿名类型:

var unitanon = new[]
{
    new { Field1="new car", Field2 = 1},
    new { Field1="old car", Field2 = 20} 
};

话虽如此,但我个人认为这是很方便的,但它在代码可读性方面却落后了一步。


2
匿名类型实际上不是F#原则。可能是您要引用类型推断(在C#中var关键字所做的事情),由此编译器会猜测您正在引用的类型。这在整个F#中都使用。
孟格斯·庞

1
我将F#用于简单的异步功能。但是,TPL使得使用C#本身很容易做到这一点。如果您要嵌入一种脚本语言,那么我肯定会使用F#进行解析。
杰蒂2011年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.