Ner*_*rve 3 .net linq f# functional-programming coding-style
我是初学F#程序员.我知道,F#是功能性的,并喜欢在那里的数据是通过功能,如管道的样式map
和iter
功能上集合.仍然,LINQ表达式提供了一种替代的,高度可读的方法来操作集合; 但是,我不确定它是否更为迫切,并且无法使用功能语言.
例如,没有LINQ:
let listOfPrimes n =
[1UL..n]
|> List.choose (fun i -> match i with
| i when isPrime i -> Some i
| _ -> None)
Run Code Online (Sandbox Code Playgroud)
使用LINQ时,我们可以:
let listOfPrimes n =
query {
for i in [1UL..n] do
where (isPrime i)
select i
}
|> List.ofSeq
Run Code Online (Sandbox Code Playgroud)
我注意到在使用LINQ时我们需要将结果序列转换为列表.那么,实际的性能差异是什么?在实际的数据库查询之外,LINQ风格上是不受欢迎的吗?何时使用该场景之外的查询来操作集合数据?
我认为这是一个偏好问题 - 有些人更喜欢使用高阶函数编写代码,有些人更喜欢LINQ风格的query
表达式.
值得注意的是,还有序列表达式,可以看作是query
语法的更简单版本.序列表达式不能让您轻松访问其他查询运算符,但它们可以很好地处理简单的事情,您也可以使用[ ... ]
表示法将结果作为列表:
let listOfPrimes n =
[ for i in [1UL..n] do
if (isPrime i) then yield i ]
Run Code Online (Sandbox Code Playgroud)
我个人的偏好是: