为什么要学习Scala

举报
feichaiyu 发表于 2019/12/15 23:04:19 2019/12/15
【摘要】 为什么还需要一个新的语言呢?我们希望程序更简洁,更易读,更不容易出错,充分利用现代处理器的多核特性,可以相对容易地实现分布式应用。专家推荐Groovy创始人James Strachan曾经说过:我认为将来可能替代Java的就是Scala 。它实在太让我印象深刻了。我甚至可以诚实地说,如果有人在2003年把那本《Programming in Scala》拿给我看了的话,那我根本就不会再去发明G...

为什么还需要一个新的语言呢?我们希望程序更简洁,更易读,更不容易出错,充分利用现代处理器的多核特性,可以相对容易地实现分布式应用。

专家推荐

Groovy创始人James Strachan曾经说过:

我认为将来可能替代Java的就是Scala 。它实在太让我印象深刻了。我甚至可以诚实地说,如果有人在2003年把那本《Programming in Scala》拿给我看了的话,那我根本就不会再去发明Groovy了。

JavaOne会议期间,在一个参加的讲座中有人向Java之父James Gosling提了一个有意思的问题:

除了Java之外,你现在还使用JVM上的那些语言?"

Java之父的回答很迅速同时也很让人意外

Scala

编程范式

Scala和其他很多语言根本的区别就是它融合了面向对象和函数式编程这两种编程范式。

Scala是一个面向对象的。和Java有primitive type不同,Scala所有东西都是对象。你可以使用所有熟悉的面向对象的编程范式和和模式。不仅如此,Scala对于面向对象有不少创新的贡献。例如Scala中特质(trait)的概念。它类似于Java中的接口(Interface),但是可以具有方法实现和字段。一个对象可以混入(mixin)多个特质。它比多继承(比如C++) 更加灵活,同时也没有多继承中二义性的问题。

Scala是函数式的。函数式编程不是一个新的概念,50年代的Lisp就是函数式编程的始祖。此后,又有Scheme,Haskell,F#等后来者。但是函数式编程一直十分小众,直到最近几年才突然流行。下面简单介绍一下函数式编程的基本概念,和其流行的原因。

在函数式编程中,函数是一等公民。和int,string一样,你可以将函数作为参数传递给另一个函数,将函数作为返回值。这样做的一个好处是程序更加简洁易读。另外,函数可以事先定义,稍后触发。这也是目前最为流行的事件驱动(event driven)或者反应式(reactive)编程的基本应用场景。

在函数式编程中,数据的操作是将输入映射为输出,而不改变任何输入。这样immutable的方法杜绝了side effect。如果你读过Effective Java,应该记得很多地方讨论过immutable的好处。在函数式编程的世界里,immutablity是默认的。当然,很多时候这样的方式会带来数据的拷贝和浪费。然而,随着计算和存储能力的不断提高,immutable编程的优势会逐步凸显。此外,和一些纯函数的语言不同,Scala也允许mutable的值,使得编程十分灵活。

具体特性

Scala可以和Java很好的衔接。Scala可以使用所有的Java库,同时对于一些Java类做了无缝的扩展。例如你可以使用str.toInt而不是Integer.parseInt(str)

Scala更加简洁。一个方面它尽量避免使用Java中的重复代码,比如无穷无尽的get和set。另一方面,丰富的库函数和函数式编程的结合,使得很多操作的实现异常简练。比如,要检验一个名字中是否含有大写字母,只需要一行代码

val nameHasUpperCase = name.exists(_.isUpper)

Scala是静态类型的语言。具备所有静态类型的优势如编译时类型检查,安全重构,代码即文档。另一方便,Scala同时在你不给出类型时,可以“聪明”地猜测类型。一定程度上具备动态类型语言的灵活性。

应用趋势

Scala是个通用的编程语言。目前其Web Framework Play已经在很多企业得到应用。Scala的Akka也被不少企业应用于大型分布式应用的开发。大数据领域的新星Spark就是用Scala编写的。Twitter内部应用大量使用Scala。在国内,使用Scala的公司还不是很多。但可以预见,Scala将会越来越流行。虽然Java 8的一些新特性和Scala很相似,但也有它的局限。这一点,我以后会详细讲解。

不可否认,Scala的学习曲线相对比较陡。往往有很多方法来解决一个问题。如果没有充分理解和合理使用,Scala编写的程序也会不伦不类。我希望通过一个系列,由浅入深,来讲解Scala。


原文作者:彤庆,转载已获得授权,如需转载请联系原作者。原文链接:

https://www.jianshu.com/p/9cb4795b8e86


转载声明:本文转载自异步社区

原文链接:https://www.epubit.com/articleDetails?id=Nfec2da15-a22c-44c9-9ba3-26da31d5b887

【版权声明】本文为华为云社区用户转载文章,如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。