您所在的位置:开发 > Java > Java+ > Scala vs F#:函数式编程特性大比拼(一)(1)

Scala vs F#:函数式编程特性大比拼(一)(1)

2010-07-07 13:11 黄永兵 51CTO独家译文 字号:T | T
一键收藏,随时查看,分享好友!

本文是51CTO独家译稿,讲述Scala和F#函数式编程特性对比。Scala是一种基于Java的通用编程语言,它编译成Java字节码,在Java虚拟机(JVM)上运行。F#是由微软主持开发的一个通用编程语言,它的面向对象和命令式特性大部分都与.NET平台兼容。

AD:

【51CTO独家译文】我们喜欢把.NET和Java拿出来进行比较:从测试速度安全性,从平台之争应用广泛性。而Scala和F#都是相对较新的编程语言,相对于.NET和Java编程语言,它们提供了许多非常吸引人的函数式编程特性,值得.NET和Java开发人员仔细玩味和评估。

Scala是一种基于Java的通用编程语言,旨在推广函数式编程,它编译成Java字节码,在Java虚拟机(JVM)上运行。虽然Scala本质上是一个函数式编程语言,但它也体现了面向对象语言的所有必要元素,这一点使函数式编程特性对编程社区的吸引力更大。

Java的取代者Scala
51CTO编辑推荐:Scala编程语言专题

F#是由微软主持开发的一个通用编程语言,它是.NET通用运行时(CLR)的一部分,它是以另一个正统的函数式编程语言Ocaml为基础的,微软在.NET平台中引入F#除了人们对函数编程的兴趣不断上升外,另一个重要的原因是函数编程非常适合高性能和并行计算。虽然它的语法清晰,但F#实际上混合了函数式编程语言,命令式语言和面向对象语言的语法特性,它的面向对象和命令式特性大部分都与.NET平台兼容,F#的三重性质也很实用,它允许程序员使用任意结合这三个编程语言的特性使用。

大话F#和C#
51CTO编辑推荐:F#函数式编程语言专题

本文将对Scala和F#功函数编程语法和相关特性进行对比,看看它们之间有何异同点。

一等函数

Scala和F#中的函数被视为一等类型,它们可以作为参数传递,从其它函数返回值,或分配给一个变量。

在下面的F#代码片段中,我首先定义了一个函数(increment),给传递来的值加1,然后,我定义了函数handler,它使用类型myfunc,使用2作为它的参数,最后,我使用一个递增的参数调用这个函数处理程序,函数increment作为一个有规则的值传递,因此它被认为是一等类型。

  1. let increment xx = x + 1  
  2. let handler myfunc = (myfunc 2)     
  3. printfn "%A" (handler increment)  
  4.  

注意上述代码中的类型推断,F#将会推断x是一个整型(int),因为我给它加了1,下面是使用Scala语法编写的代码:

  1. def increment(x:Int) = x + 1  
  2. def handler( f:Int => Int) = f(2)  
  3. println( handler( increment ))  
  4.  

懒散式赋值

F#支持懒散式赋值(lazy evaluation),但由于性能原因,这项特性默认并没有开启,相反,F#支持所谓的主动赋值(eager evaluation),用关键字lazy明确标记函数为懒散函数,运行程序时指定Lazy.fore选项。

  1. let lazylazyMultiply = lazy ( let multiply = 4 * 4  )  
  2.  

和F#一样,Scala默认也不支持懒散赋值,但和F#不一样的是,Scala是用lazy关键字标记值,而不是标记函数。

  1. def lazyMultiply(x: => y:) = { lazy val y = x * x }  
  2.  

内容导航



分享到:

热点职位

更多>>

热点专题

更多>>

读书

PHP程序开发范例宝典
本书全面介绍了应用PHP进行网站开发的各种技术和技巧。全书分为20章,内容包括PHP的运行环境配置、表单及表单元素的应用、CSS与J

51CTO旗下网站

领先的IT技术网站 51CTO 领先的中文存储媒体 WatchStor 中国首个CIO网站 CIOage 中国首家数字医疗网站 HC3i