论坛首页 Java企业应用论坛

为什么选择Scala

浏览 28076 次
该帖已经被评为隐藏帖
作者 正文
   发表时间:2009-08-06  
pure 写道
现在的ide感觉真没法用一样,Eclipse和Netbeans的插件都没成功运行过Scala,失望,尽快解决IDE的问题就大有作为了。

NB的插件还是不错的吧,说什么也是dcaoyuan他们搞的,有一些动能确实还没有实现,不过自己稍微修改一下,添加一点Ant脚本也都解决的。个人觉得NB的插件比eclipse好用很多
0 请登录后投票
   发表时间:2009-08-06  
F#?
字数字数
0 请登录后投票
   发表时间:2009-08-07   最后修改:2009-08-07
cscript 写道
文章花了很大的篇幅说明静态类型的好处,但是静态类型的好处并不是scala独有的,效率、可检验属性、安全重构等等特性,哪家静态类型语言没有啊?都21世纪了,还把这些当成自己的特色。至于类型推理、匿名函数,新版的C#、C++都有这些特性,又不是scala的专利。

有人对scala的评价如下,我觉的很有道理:
C# 3.0 has a lot of the features that Scala has and they are much more palatable than the way Scala implements them. Why come up with a non-mainstream syntax for existing feature?

简单的说,这些语法糖大家都能想到,干嘛故意搞的和主流语法不一样?



Martin Odersky研究编程语言20多年,接触研究过非常多种语言,scala也不是他第一个发明的,因此scala的语法来源非常广,这不能说是scala的问题,我总觉得程序员不应该将语法作为一种语言好坏的理由.
很多scala中的"不同",也是有其意义的,比如[]改成(),是因为"与Java比Scala很少有特例。数组和Scala里其他的类一样只是类的实现。当你在一个或多个值或变量外使用括号时,Scala会把它转换成对名为apply的方法调用。于是greetStrings(i)转换成greetStrings.apply(i)。所以Scala里访问数组的元素也只不过是跟其它的一样的方法调用。"当然,其实他们还是可以做成[],但有这个理由,起码是有情可原的.
但他有些地方过头了,比如元组tuple(就是可以放不同类型的元素的list),下标居然从1开始,而且是_1,_2这样,他们的解释是:"因为对于拥有静态类型元组的其他语言,如Haskell和ML,从1开始是传统的设定。"我狂吐血!tnnd你总的和list的访问方式一致吧,起始下标一个是0,一个是1,还让不让人活了,就我而言,以后如果编程时遇到这两种列表中特定位置取值,肯定要多想一想下标的问题,这就超出了语法的问题了,是真正让人感觉无法接受的.
0 请登录后投票
   发表时间:2009-08-07   最后修改:2009-08-07
引用
但他有些地方过头了,比如元组tuple(就是可以放不同类型的元素的list),下标居然从1开始,而且是_1,_2这样,他们的解释是:"因为对于拥有静态类型元组的其他语言,如Haskell和ML,从1开始是传统的设定。"我狂吐血!tnnd你总的和list的访问方式一致吧,起始下标一个是0, 一个是1,还让不让人活了


如果能够做出真正有意义的创新,语法怪异点也就忍了,没本事却要硬装着与众不同,还企图取代这个那个,groovy就比它务实多了。
0 请登录后投票
   发表时间:2009-08-07  
其实我觉得现在Scala的语言挺优美的,设计的很合理,当然如果你还是以看Java的习惯来对待Scala,难免会有不同意见,我觉得Scala在语法简洁性和易读性还是平衡的很好,毕竟,语法不应该成为你学习语言的障碍
1 请登录后投票
   发表时间:2009-08-07  
prowl 写道
和groovy相比又好在哪?


静态类型。
0 请登录后投票
   发表时间:2009-08-07  
cscript 写道
文章花了很大的篇幅说明静态类型的好处,但是静态类型的好处并不是scala独有的,效率、可检验属性、安全重构等等特性,哪家静态类型语言没有啊?都21世纪了,还把这些当成自己的特色。至于类型推理、匿名函数,新版的C#、C++都有这些特性,又不是scala的专利。

有人对scala的评价如下,我觉的很有道理:
C# 3.0 has a lot of the features that Scala has and they are much more palatable than the way Scala implements them. Why come up with a non-mainstream syntax for existing feature?

简单的说,这些语法糖大家都能想到,干嘛故意搞的和主流语法不一样?



你跟java程序员推销C#和C++?

你的问题很奇怪,按照你的理论,有了ruby,其他动态语言,比如groovy、javascript也可以歇菜了。
0 请登录后投票
   发表时间:2009-08-07  
icanfly 写道
我觉得曾经有一篇文章说得非常好。大家可以看下,其中一句非常经典:为什么事情非要为了不同而不同?
一语点中scala的生辟语法。这使得从JAVA转向过来变得非常不容易。


拜托你先说明一下,scala哪点是“为了不同而不同”

对于不愿学习新东西的人来说,所有新特性都是“生僻”的,任何转向都是不容易的。


举个例子来说,拿C# 3.0和C# 1.0比较,也可以套用同样的说辞。

0 请登录后投票
   发表时间:2009-08-07   最后修改:2009-08-07
maddogfyg 写道

Martin Odersky研究编程语言20多年,接触研究过非常多种语言,scala也不是他第一个发明的,因此scala的语法来源非常广,这不能说是scala的问题,我总觉得程序员不应该将语法作为一种语言好坏的理由.
很多scala中的"不同",也是有其意义的,比如[]改成(),是因为"与Java比Scala很少有特例。数组和Scala里其他的类一样只是类的实现。当你在一个或多个值或变量外使用括号时,Scala会把它转换成对名为apply的方法调用。于是greetStrings(i)转换成greetStrings.apply(i)。所以Scala里访问数组的元素也只不过是跟其它的一样的方法调用。"当然,其实他们还是可以做成[],但有这个理由,起码是有情可原的.


使用 () 还有一个原因是要把 [] 用于泛型。
泛型用 <> 时,大于号和小于号的多义性会给语法解析(尤其是支持操作符重载的语言)带来一大堆问题。
(最典型的就是 VC6 里面模板嵌套一定要加个空格)

引用
但他有些地方过头了,比如元组tuple(就是可以放不同类型的元素的list),下标居然从1开始,而且是_1,_2这样,他们的解释是:"因为对于拥有静态类型元组的其他语言,如Haskell和ML,从1开始是传统的设定。"我狂吐血!tnnd你总的和list的访问方式一致吧,起始下标一个是0,一个是1,还让不让人活了,就我而言,以后如果编程时遇到这两种列表中特定位置取值,肯定要多想一想下标的问题,这就超出了语法的问题了,是真正让人感觉无法接受的.


人家几十年前 Lisp 里面就用 fst 和 snd 了,源远流长,给你改成 0 才不妥呢。
tuple 是定长的,访问方式和数组、链表不一样,tuple 如果做成下标取值方式,所有函数的调用性能都会慢一大截 ……
你不满意可以把它转成 Seq 再用下标取值。

你不爽是因为被 java 毒害太久了。
0 请登录后投票
   发表时间:2009-08-07  
sekiyika 写道
pure 写道
现在的ide感觉真没法用一样,Eclipse和Netbeans的插件都没成功运行过Scala,失望,尽快解决IDE的问题就大有作为了。

NB的插件还是不错的吧,说什么也是dcaoyuan他们搞的,有一些动能确实还没有实现,不过自己稍微修改一下,添加一点Ant脚本也都解决的。个人觉得NB的插件比eclipse好用很多

现在可以用了,还不错。
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics