我应该选择一种功能编程语言吗?


10

最近,我更加关注编写代码的方式。在阅读了几本关于设计模式的书(我敢肯定它们的过分执行)之后,我已经将思想大大地转向了封装那些改变的东西。我倾向于注意到我写的接口更少,而代码则更多地面向方法,在这里我喜欢用谓词,动作和其他委托任务将生活融入旧的类中。我倾向于认为通常是更改的动作,因此我将其封装。我什至经常(尽管不总是如此)将接口分解为单个方法,然后我更喜欢使用委托来完成任务,而不是强制客户端代码创建新类。

所以我想它然后打我。我应该进行函数式编程吗?
编辑: 我可能对函数式编程有一个误解。

目前,我选择的语言是C#,并且来自C ++背景。我是一名游戏开发人员,但目前没有工作。

我对建筑充满热情。我的优点是干净,灵活,可重用和可维护的代码。我不知道这些方法是否使我中毒,或者是否更好。我是发烧还是应该继续发烧?我了解这可能是关于“使用正确的工具完成工作”的问题,但是我想听听您的想法。

我应该选择一种功能语言吗?我担心的因素之一是离开Visual Studio的舒适感。


如果离开Visual Studio会遇到麻烦,则可以尝试F#。
亚当李尔

这不是一个破坏交易的行为。我只是没有尝试过许多其他选择。我想我会害怕没有智能感知,重构或类似工具的工作,并且有这样的想法,您最终会再次在纯文本编辑器中编写代码。
声明

我目前没有工作...这不是应该首先解决的问题吗?
工作

我会尝试一段时间不使用VS。您可能会发现以极简主义的方式进行工作可能很有趣。
Zachary K

@Job,是的,但是最近我遇到了一系列非常糟糕的事件:)我的脚受伤了(好吧,我没有用脚编码,但是……)寻找一个新的。
声明

Answers:


5

学习新东西应该很有趣。学习一种新的编程方法应该可以使您成为一名更好的程序员。检查Haskell或Erlang之一,它们都可以,但是有很大的不同。如果您选择Haskell,请在YouTube或播客上找到“ Simon Payton Jones”的一些演讲。这个家伙是一位出色的演讲者。


1
我选择此答案有很多原因。@Zachary K说,走出知名地点的盒子并换个角度可能会很有趣。我不应该害怕尝试新的东西。还没结束。Haskell是一种语言,之前几次在各种讨论中引起了我的注意。我不知道我是否需要功能语言,但正如@Toby Allen所说,这是查看其他方式工作方式的好方法,在尝试了一些UnrealScript之后,我对此表示同意。@ammoQ有点遗漏了一点,但是我对我的问题的定义不是很好。我仍然得到他的关注。
声明

乐意效劳。玩得开心
Zachary K

14

神圣的* * * *。没有银弹。下台 放松,深呼吸。

仅仅因为您的工具箱中有一个工具,并不意味着您一定会使用它。专注于手头的任务,即编写有效的程序,并在代码闻起来不好时进行重构。不要仅仅因为每一个细节都会封装和抽象就可能在将来的某一天改变它。IMO,最好直接开始,KISS&YAGNI,并在实际变化时对变化的需求做出反应。

我认为这里没有人可以告诉您功能语言是否更适合您的需求。因为您没有告诉我们您正在从事的工作。


好吧,我现在不在做什么特别的事情。我在工作之间。我是/曾经是游戏开发人员。
声明

3
这是过度工程的危险情况。没有截止日期,没有积压,只是太多的时间被细节所困扰。
user281377 2011年

(因为我脑海中没有清晰的画面,所以需要进行很多猜测)我想我的“需求”更多地体现在我喜欢编写代码的方式中。我对函数式编程不了解很多,我想这个名称可能会给我带来一些困扰。我只是觉得我的喜好并没有像我想象的那样面向对象。所以也许我应该喜欢在另一个范例中工作?
声明

是的,我想是这样。我现在处于学习阶段,所以这就是为什么我探索以特定方式写作的可能性的原因。在工作中,人们通常没有时间编写这样的代码,因此您必须尊重行为准则并在开发人员之间保持一致的风格。
声明

2
现在您可以在工作之间尝试各种工具,这绝对可以,但是恐怕我们无法告诉您鞋子是否合脚。
user281377 2011年

12

您可以选择F#。它是.NET功能语言,它将使您能够使用Visual Studio并重用许多.NET知识。当然,它的程序集与C#程序集无缝集成(允许您在一个项目中轻松地将C#,C ++ / CLI和F#组合在一起)。VS Pro或更高版本随附F#支持,但是我不确定是否默认启用它。


我认为VS2008中有一个F#插件,但VS2010中它是默认插件。
apoorv020 2011年

F#甚至与免费的VS Shell一起使用。
SK-logic

6

IMO,值得尝试一种功能性语言。即使您从不直接在已发布的产品中使用它,学习它几乎肯定会在编程方面提供一些不同的观点/观点。即使最终您继续用C#进行所有“真实”编码,也很可能会帮助您改善用C#编写的代码。

正如其他人提到的那样,对于Visual Studio习惯的人来说,显而易见的选择是F#,它基本上是Ocaml / Caml / ML的派生词。IMO,对于Microsoft来说,这是向人们介绍函数式编程的一个不错的选择-它是一种成熟的函数式语言,但语法却不像某些语法那样陌生(例如,基于Lisp的语言具有真正的优势,初学者几乎总是很难阅读)。


2

是的你应该。

如果您选择像Haskell这样的纯粹语言,您不仅会学习一种新语言,而且还会学习一种新的思维方式。这也可以在以后的程序/ OO工作中为您提供帮助。

另一方面,F#不是纯函数,因此您很容易错过函数编程中的重要内容。可以这么说,Yóu可以继续编写程序程序,在此程序中更改变量,就可以用F#语法在其中执行一些副作用。


我实际上是从tryhaskell.org开始的:)学习新事物很令人兴奋。
声明

1

如果您已经在使用c#,则不需要新的语言-通过扩展方法,lambda和通用的Func / Action类型的组合,使用C#编写功能代码相当容易-这样,您就可以在最有意义的算法,而无需更改整个应用程序。


1
您总是需要另一种语言。即使您从未使用过它,也是学习一种新语言的绝佳学习体验。没有一种语言拥有一切。
Toby Allen

您始终需要学习,但不一定需要学习另一种语言。好处来自学习函数式编程的概念,而不是语言本身,并且您可以这样做而无需离开熟悉的环境并更改整个项目。C#足够好,实际上,只有在算法中真正受益于功能代码,这才具有巨大的优势。
汤姆·克拉克森

是的,我想我的担忧更加偏向于是否存在一种更适合(语法上)适合于以我发现自己经常在使用这种方式工作的方式来处理方法/函数的语言。C#提供了lambda表达式,它本身很好,但是例如,让一个函数返回一个没有任何参数的值会产生诸如()=> x之类的代码,也许还有更简洁的方法可以使用。
声明

+1 @托比。最近,我浏览了UnrealScript参考资料,并看到了一些有趣的语言解决方案,用于与state等。考虑到问题,它延续到了C#,他们有一个很好的解决方案。所以,是的,我确实相信,当您走出沙箱并为邻居掠夺所有发现的沙子和玩具时,您会学到很多东西:)
声明
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.