欢迎来到天天文库
浏览记录
ID:50669936
大小:73.80 KB
页数:7页
时间:2020-03-07
《Ruby高手点评Scala编程语言十大绝招.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、Ruby高手点评Scala编程语言十大绝招(1)2009-07-2110:04司马牵牛51CTO.com我要评论(1)字号:T
2、T本文作者是一位资深的Ruby程序员。在使用过从Pascal到Ruby和Groovy等一系列语言后,这位程序员发现,Scala编程语言有着很多强大之处,以至于他决定投身于Scala之中了。AD:【51CTO精选译文】几个月前,我开始使用Scala。我用过的编程语言还有Pascal、C、C++、Java、PHP、Ruby和Groovy,但是,与所有那些我用过的语言相比,我发觉Scala是一门与众不同的语言。我是在看到Twitter上关于
3、Ruby和Scala讨论之后,才开始我的Scala编程之旅的。现在,使用Scala编程已经几个月了,关于Scala我有两点想法,虽然类似的想法已广为人知,但我仍很想与你们分享:51CTO编辑推荐:Scala编程语言专题◆Scala的确很棒。◆我的确认为计算机学院应该开一门Scala的语言课程。在这篇文章中,我会讲述为什么我会有这样的想法,在此之前,有几点我想要先声明一下:本文无意对编程语言进行评比,我要讲述的主体是为什么你应该学习Scala。51CTO之前曾发布过一篇Java程序员为何要学习Scala的文章,可能也会对你有所帮助。目前Scala有两个实现方式,
4、一种是在JVM(Java虚拟机)上运行,另一种是在CLR(CommonLanguageRuntime的缩写,即公共语言运行库)上运行。不过,JVM的实现方式更为成熟。如果你想要使用.Netframework框架,我认为最好还是听从Liftframework框架创始人大卫·波拉克(DavidPollack)的建议:使用F#。但在这篇文章中,我将只关注JVM这种实现方式。我是一个Ruby程序员,并且我会继续喜欢Ruby,因为它是我见到过的最棒的动态语言。但我也喜欢Scala,因为在其他工作领域,它提供的某些功能非常强大。现在,让我们来仔细分析一下,是哪些原因让我选
5、择Scala作为我的下一个编程语言:强大的编程语言Scala是一门非常强大的语言,它允许用户使用命令和函数范式进行编写代码,因此,编程时你可以使用常用的命令式语句,就像我们使用C、Java、PHP以及很多其他语言一样,而且,你也可以使用类似Lisp语言中函数式语句,还有,你可以混合使用这两种风格的语句,就像Ruby或Groovy。不过,当我们谈论的函数范式时,与Ruby和Groovy有一点不同的地方,那就是Scala几乎支持函数语言中所有已知的功能,比如,模式匹配(Patternmatching)、延迟初始化(Lazyinitialization)、偏函数(P
6、artialFunction)、不变性(Immutability),等等...即是说,认识到这样一个事实是非常重要的:Scala的强大源自它对函数范式的支持,而后者令Scala成为一种高等级(high-level)的编程语言。对于高等级的编程语言,你只需关注what(做什么)而不是如何做(how)。下面,让我们看一个Java示例:int[]x={1,2,3,4,5,6};ArrayListres=newArrayList();for(intv:x){if(v%2==1)res.add(newInteger(v));}仔细看一下上面这段示例代码,你会注意到,我想
7、要做的“what”部分(过滤掉奇数值)仅出现在第四行中,而其余行则是“how”如何做的部分(结果变量的初始化以及一个循环操作)。如果我想要再写一个过滤器,用于筛选偶数值,那就需要再写五行代码,而使用一门像Scala这样的高等级语言,你只需编写“what”那部分的代码:valx=Array(1,2,3,4,5,6)valres=xfilter(_%2==1)//过滤奇数值valres2=xfilter(_%2==0)//过滤偶数值我们可以看到,相对于上文中的Java代码段,这段代码更加简洁,而且具有更好的可读性。高效Scala是一种高效的编程语言,实际上,根据最
8、新的benchmark性能测试,它几乎和Java一样快捷。在JVM上实现的Scala代码,可以编译为字节码,在这一过程中,代码通过优化阶段进行编译。尾递归优化是一个很好的示例,它可帮助用户专注于函数范式而无需以牺牲性能为代价。还有一个示例是,将Scala值类型对象转换为Java基本类型时进行的优化。可扩展Scala语言本身的名字Scala来自Scalable(可扩展的)一词,这意味着这种语言可以按照用户的需求进行扩展。因此,从根本上来讲,用户可以添加新的类型和控制结构。比如,我想要添加一个简单的“loop”控制结构://一个简单的构建defloop(range
9、:Range)(op:Int=>Uni
此文档下载收益归作者所有