我只是喜欢F#来完成适合函数式编程的任务.我使用C#作为命令式OO.
但是,每当切换到C#时,留下F#的非详细语法和类型推断变得越来越痛苦.
有没有人知道是否有一些东西用于非冗长的命令式编程,因为语法和类型推断并不真正与命令式和功能性相关.
F#3.0正在获得一些功能,以更好地支持命令式面向对象编程(在使用命令式.NET库进行数据访问时经常需要这些编程).它将具有自动实现的属性(请参阅MSDN文档):
type MyClass() =
let random = new System.Random()
member val AutoProperty = random.Next() with get, set
member this.ExplicitProperty = random.Next()
Run Code Online (Sandbox Code Playgroud)
它还允许您使用member let构造计算初始值(与member每次调用时重新评估主体的情况相反).
F#3.0不会使命令式编程变得更容易,当涉及到变异和类似break和continue循环的事情.我认为强调不可变状态是为了鼓励良好的F#编程风格,但是对此有很多讨论,你可以建议并投票支持.
还有一个关于你的评论的注释,其中"纯函数式编程是一个不匹配的".我认为这实际上取决于可用的库和您正在关注的心智模型.我相信FP实际上非常适合GUI,没有F#库可以证明它.您可能会发现这个问题很有趣:功能GUI编程是否可行?
我不清楚你对F#的不满意.虽然它有利于函数式编程风格,但它在很多方面也改进了.NET中的命令式编程.我想不出任何C#代码不能被功能相同 - 而且更短 - F#代码所取代(不安全的代码是我想到的唯一例外).
甚至是表示例如数据库记录的可变类型
class Employee {
public Employee(string firstName, string lastName, int age) {
this.FirstName = firstName;
this.LastName = lastName;
this.Age = age;
}
public string FirstName { get; set; }
public string LastName { get; set; }
public int Age { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
可以在F#中简化为以下内容:
type Employee =
{ mutable FirstName : string
mutable LastName : string
mutable Age : int }
Run Code Online (Sandbox Code Playgroud)
这应该是C#的一杯茶.
当你遇到F#缺乏的功能时,它通常表明有更好的方法.现在是停止和分析典型命令式方法缺点的好时机.
事实上,F#的最大优势可能在于它是一种多范式的语言.您可以使用OO来构建项目,并使用"小型"功能编程来组织模块 - 没有一种风格可以占主导地位.它只会增加工具箱的大小.
如果有特定的任务/概念,您在移植到F#时遇到问题,您应该提及它们,以便其他人可以提供解决方案.
| 归档时间: |
|
| 查看次数: |
1472 次 |
| 最近记录: |