Bookcold

导航

F#入门—Functional Programming(一)

F#的主要泛型是函数式编程。在命令式编程中,我们主要花时间在列出执行任务的每一步细节。在函数式编程中,我们主要关心做什么,而不是怎么做;函数式编程本质上是对计算的又一次抽象,它被抽象为计算什么而不是怎么计算。虽然函数式编程不是银弹,但是它能使编程更清晰,而且在例如并发编程上会更简单。

一般的函数式编程需要满足一下特征:

•Immutable data •Ability to compose functions •Functions can be treated as data •Lazy evaluation •Pattern matching

用函数的方式编程 Immutability(不变性)

在F#中并没有变量(variable)的概念,只有值(value);因为在函数式编程中,任何声明的值默认都是不变的。

如果一个函数会改变程序的状态,例如写一个文件或者改变了内存中的一个全局变量,这就别称为“副作用”(side effect)。副作用并不总是不好的,但是它是许多bug的根源。不变的变量能帮助写更安全的代码,因为我们不用操心我们不能改变的东西。

下面的代码分别用命令式和函数式代码实现算一组数的平方和:

let square x=x*x //命令式编程 mutable表示是变量 let imperativeSum numbers= let mutable total=0 for i in numbers do let x=square i total <- total+x total //函数式编程 let functionalSum numbers= numbers |> Seq.map [...]

posted on 2010-04-21 19:50  bookcold  阅读(159)  评论(0)    收藏  举报