`
tongqingqiu
  • 浏览: 24796 次
  • 性别: Icon_minigender_1
  • 来自: 亚特兰大
社区版块
存档分类
最新评论

为什么要用Scala

 
阅读更多

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

专家推荐

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。

6
1
分享到:
评论
6 楼 tongqingqiu 2015-03-03  
是比较难,也需要时间和项目的积累。更需要有这种最佳实践的指导。目前只有twitter有一个Effective scala。我做个一些翻译的工作。http://twitter.github.io/effectivescala/index-cn.html
5 楼 superpeter 2015-03-02  
Scala虽然不错,但它比Java难不少。其实,我们真正想要的是足够灵活,但一定要简单一致的语言(至少不应比Java难)。
4 楼 tairan_0729 2015-03-02  
期待中...
3 楼 aunox 2015-03-02  
white_crucifix 写道
小道消息说linkedin想从scala转回java

这么夸张,没听说啊!
2 楼 aunox 2015-03-02  
这么夸张!
1 楼 white_crucifix 2015-03-02  
小道消息说linkedin想从scala转回java

相关推荐

    scala3 scala3 scala3 scala3 scala3

    Scala3,也被称为Scala 3或Dotty,是Scala编程语言的一个重大更新,旨在提高其简洁性、可读性和类型安全性。...学习和掌握Scala3的这些变化对于任何想要深入理解这个现代多范式编程语言的人来说都是至关重要的。

    scala sdk scala-2.12.3

    Scala SDK,全称为Scala Software Development Kit,是用于开发Scala应用程序的核心工具集。Scala是一种多范式的编程语言,融合了面向对象和函数式编程的特点,它运行在Java虚拟机(JVM)上,能够充分利用Java生态...

    scala + mybatis 数据库查询

    - XML映射文件通常包含SQL查询、参数映射和结果集映射,它们定义了MyBatis如何执行查询并将结果转换为Scala对象。 4. **Scala中的SQL查询** - 使用Scala版MyBatis,我们可以通过调用Mapper接口的方法执行SQL查询...

    Scala语法简明教程

    - 对于想要深入学习Scala的开发者,以下是一些值得参考的资源: - **书籍**: - 《Programming in Scala》:这是一本权威的Scala教程,适合所有级别的开发者。 - 《Scala for the Impatient》:适合已经熟悉其他...

    scala2.12.1Windows镜像包

    这个"scala2.12.1Windows镜像包"是为Windows操作系统设计的Scala编程环境的安装包,版本号为2.12.1。Scala 2.12.x系列是其重要的一个稳定版本,带来了许多性能优化和新特性。 1. **Scala语言特性**: - **类型系统...

    scala-2.12.10.zip

    这个"scala-2.12.10.zip"文件是Scala编程语言的特定版本——2.12.10,专为Windows操作系统设计的安装包。Scala 2.12.x系列是该语言的一个稳定版本,它提供了许多新特性和改进,旨在提高开发人员的效率和代码的可维护...

    scala学习源代码

    "示例,或者可能包含一些更复杂的案例,如函数定义、类和对象的创建、集合操作、模式匹配的使用,甚至是Actor系统的简单实现。通过研究这些源代码,你可以更好地理解和掌握Scala语言的核心概念。 总的来说,Scala是...

    windows版scala-2.11.12.zip

    Spark是一个用Scala编写的分布式计算框架,它利用Scala的简洁语法和强大的功能来构建大规模数据处理应用。Scala与Spark的紧密集成使得开发者可以编写出高效的并行和分布式代码。在Windows上配置好Scala环境后,你...

    scala API 操作hbase表

    在本文中,我们将深入探讨如何使用Scala API操作HBase数据库。HBase是一个分布式、面向列的NoSQL数据库,它构建于Hadoop之上,提供实时访问大量数据的能力。Scala是一种强大的函数式编程语言,与Java虚拟机(JVM)...

    scala实战高清讲解

    - 隐式转换:Scala允许隐式参数和隐式转换,有助于代码简洁性,但需谨慎使用以避免混淆。 - 类型推断:Scala具有强大的类型推断能力,允许编写更少的类型声明,提高代码可读性。 - 泛型:泛型提供了一种方式来...

    学习scala好的项目

    在这个名为"学习scala好的项目"的压缩包中,我们可以期待找到一系列有助于初学者掌握Scala编程的知识资源。 首先,让我们深入探讨Scala的基础知识。Scala的语法简洁而富有表现力,它的类型系统支持静态类型检查,有...

    Scala考试题1

    - Scala 使用 REPL(Read-Eval-Print Loop),Java 需要编译。 - Scala 有更强大的模式匹配,Java 需要使用 switch-case 或者 if-else。 15. **Java 集合与 Scala 集合的转换**: - 导入 `scala.jdk....

    Scala函数式编程

    1 scala用起来比java更灵活 2 强大的collection,可以更加方便的处理collection类的数据 3 不同于java的并行处理方法,有点像c的逻辑思路 4 开发成本比java小,但是语言学习成本比java高很多 正在阅读这本书的...

    mongo-scala-drive的使用demo

    `mongo-scala-driver` 提供了一个 `MongoClients` 对象,我们可以用它来创建到 MongoDB 服务器的连接: ```scala import org.mongodb.scala._ val mongoClient = MongoClient("mongodb://localhost:27017") ``` ...

    最好的scala学习 课件

    这部分会讲解如何使用List、Set、Map等集合,以及如何进行集合操作,如映射、过滤、折叠等。此外,还会涉及Option和Either等类型,它们是处理可能的null值和错误的良好工具。 接着,"Scala进阶之路-part03-面向对象...

    Programming.in.Scala.pdf

    书中对Scala语言结构的解释深入,并常常用Java作为对比的例子。 4. 马修·托德(Matthew Todd)评价该书为Scala平台提供了宝贵指南,认为它能激发更好的编程灵感和可扩展软件设计的实现。 5. 克里斯托斯·K·洛夫...

    scala-2.11.12 win msi 安装包

    10. **Spark大数据处理**:标签中提到的Spark是由Scala构建的大数据处理框架,其API主要用Scala编写,这使得Spark与Scala的结合非常紧密,便于开发高性能的数据处理应用。 压缩包中的另一个文件"scala-2.11.12.txt...

    scala-2.12.14.zip&scala-2.12.11.tgz Linux版本压缩包.rar

    对于使用Scala进行大数据处理,首先需要安装Spark,然后可以使用Scala API创建Spark程序。Spark提供了SparkContext(SC)作为与集群交互的主要入口点,以及DataFrame和Dataset等高级接口,使得开发人员能够高效地...

Global site tag (gtag.js) - Google Analytics