`
weitao1026
  • 浏览: 1062871 次
  • 性别: Icon_minigender_1
  • 来自: 上海
社区版块
存档分类
最新评论

Scala 简介 优点 及 用途

 
阅读更多

Scala 是一种有趣的语言。它一方面吸收继承了多种语言中的优秀特性,一方面又没有抛弃 Java 这个强大的平台,它运行在 Java 虚拟机 (Java Virtual Machine) 之上,轻松实现和丰富的 Java 类库互联互通。它既支持面向对象的编程方式,又支持函数式编程。它写出的程序像动态语言一样简洁,但事实上它确是严格意义上的静态语言。Scala 就像一位武林中的集大成者,将过去几十年计算机语言发展历史中的精萃集于一身,化繁为简,为程序员们提供了一种新的选择。

优势:

 

个人觉得比较运行速度其实没啥意义, 因为两种语言都是生成 JVM 的字节码, 依赖 JVM 这个虚拟平台来跑代码. 除非 Scalac (Scala的编译器) 有重大 bug, 生成的字节码执行让人无法接受, 否则基本上不会相差太多. 再说, scala 都到大版本2了, 这种概率实在是不大.

相比较与 Java, 在下觉得 Scala 最主要的有以下两点优势:

  • FP 泛型支持
    如果用多了 spring 中大量的 template 接口, 你就会觉得 FP 其实还是蛮好用的.
    而这仅仅是 FP 好处的冰山一角.
    函数其实就是一个 input -> output (scala 也是这么表示一个函数的), 没有任何副作用, 与状态无关, 由于这种特性, 所以函数式的编程范式在分布式领域有很多好处
    对于函数式编程,我的知识实在是皮毛, 但可以这么说, FP 相对与 OO 有哪些优势, Scala 对于 Java 差不多就有哪些优势.
    正因为 FP 有如此多的优势, 所以 Java8 才引入了 FP. 从某种程度上来说, Java 认可了 Scala 的做法.

  • 类型系统支持
    如果说 Java 是一种类型安全的语言, 那么毫无疑问, Scala 的类型更加安全, 从某种程度上说, Scala 的类型是图灵完备的, 而 Java 不是. 我的一位好朋友在这方面研究的比较深( http://hongjiang.info/scala/ ), 而我对与 Scala 的类型系统的理解, 也还是皮毛.

正是以上这两点大优势, 造成了 Scala 比 Java 更加安全, 同时又具备灵活性, 想象力.

  • 其他语言层面上的优势
    在 Java 中, 你是否有时很想继承多个 AbstractClass 呢? 对不起, Java 只支持单继承
    在 Scala 中, 你可以进行 mixin (Java 8 也开始引入 default method 了呢)

    在 Java 中, 想要一个 singleton ? 要么在 static block 中做, 要么利用 Enum 的单例特性完成, 或者其他更纠结的方法.
    在 Scala 中, 只要声明为 object, 即为单例.

    在 Java 中, 想要延迟加载一个单例? double check
    在 Scala 中, 只要在 object 中将变量修饰为 lazy 即可

    在 Java 中, 想要对集合进行一些操作? 使用一层一层的 for 循环吧
    在 Scala 中, 使用 collection 的一些集合操作, 即可获得如写SQL般的享受.

    在 Java 中, 在并发中想对Future进行回调? 对不起, Future 不是 Listenable (无法支持回调), 除非你使用额外的工具(如 guava, spring)
    在 Scala 中, 本来就主张异步编程, future 和 promise 的配合让人非常愉快.

    在 Java 中, 要透明扩展一个第三方库的类怎么办? 包装, 再加一层.
    在 Scala 中, 有强大的 implicit 机制让你更优雅的做到这一点, 同时还能保证类型安全(比起 Ruby 的 monkey patch, 要安全得多)

  • Scala 的表达力很强, 相同功能的代码, 用 Java 和 Scala 的行数不可同日而语.

这些单单是语言层面上的优势, 除此之外, Scala 还能无缝结合 Java

尽管罗列了如此多的好处, 但 Scala 有如下劣势:

  • 语法复杂, 学习曲线非常高
  • 国内 Scala 程序员很难找 (目前 Scala 的影响力也在缓慢扩大, 比如 Scala 社区中的明星 Spark 的流行也在慢慢拉动 Scala 的流行, 如同 rails 之于 ruby)
  • 社区, 生态还比较小, Scala 风格的库还非常少(但可以和 Java 很容易的斜街很多时候弥补了这一点)

与java 差别

相对于Java而言,Scala的代码更为精简(减低犯错),而且功能更为广泛(Scala其实是Scalable Language 的简称,意为可扩展的语言),许多Scala的特性和语法都是针对Java的不足和弱点来设计的。

Scala的特点是有很多函数程式语言的特性(例如ML,Miranda, Scheme,Haskell),譬如惰性求值,list comprehension, type inference, anonymous function, pattern matching 等等,同时也包含 Object-Oriented 的特性(OO 能与 FP 混合使用是 Scala 的亮点)。此外,许多相似于高级编程语言的语法也渗入其中(例如 Python),不仅提高了 Scala 代码的可读性,维护、修改起来也较为省时省力。

Scala 与 Java 语法上的明显差异有:

  1. 不需要分号结尾
  2. 类型定义开头需大写(与 Haskell 相同)
  3. 函数定义需 def 开头(与 Python、Ruby 相同)
  4. return 可以省略

在此值得提醒的是,统计显示,Scala 的代码运行速率仅为 Java 的 8 成。

 

用途

Spark 是用scala 开发的,可以做大数据,web等,其他功能 和java差不多

分享到:
评论

相关推荐

    scala java相关开发工具

    Java和Scala都是在JVM(Java虚拟机)上运行的语言,它们有着紧密的联系,但各自拥有独特的特性和用途。 首先,我们来看"jdk-8u221-linux-x64.tar.gz",这是一个针对Linux 64位系统的Java Development Kit(JDK)的...

    scala的Option类型

    Option的主要优点在于它可以强制程序员显式处理缺失值的情况,而不是默默地抛出异常。通过使用Option,我们可以编写更加安全和可靠的代码。以下是对Option类型更深入的理解: 1. **Option的两种形式**: - **Some...

    Figaro_Quick_Start_Guide_0

    Scala是一种多范式的编程语言,它将面向对象编程和函数式编程的优点结合在了一起。Scala与Java兼容,这意味着你可以在Scala程序中自由使用Java的库和工具。Scala的优势在于它的简洁、表达能力强、类型系统丰富且具有...

    literally:从字符串构建的文字值的编译时验证

    `literally`关键字的用途广泛,尤其是在需要确保字符串精确符合某种规则的情况下。比如,它可以用于数据库查询的构造,确保SQL语句不会因为用户输入的非法字符而引发注入攻击。此外,它还可以用于创建URL、邮件地址...

    百度公司招聘面试试题及面试过程.pdf

    - **技术深度**:面试官会详细询问简历上的项目经历,期望候选人对使用的编程语言(如Python、Java、Scala)有深入理解,同时对机器学习和数据挖掘有扎实的基础。 - **版本控制**:了解特定框架的版本,体现出对...

    class反编译软件

    3. Procyon:这是一个较新的反编译器,它不仅支持Java,还支持Java的子集如Groovy和Scala。Procyon在处理Java 8的新特性时表现优秀,如lambda表达式。 4. JD-GUI:虽然它不是一个完整的反编译器,但它是JAD的一个...

    ansible-sbt-extras:用于自动安装 sbt-extras 的 Ansible 脚本

    在这个场景中,没有提供具体的标签,但通常与 Ansible 相关的标签可能包括 "devops"、"configuration management"、"scala"、"build tool" 等,这些标签可以帮助其他开发者理解这个剧本的用途和领域。 压缩包中的...

    kotlin入门教程

    它旨在解决Java的一些限制,如冗余的语法和空指针异常等问题,同时保留了Java的许多优点。 #### Kotlin的应用领域 **1. 服务器端开发** - **简洁性**: Kotlin 的语法更加简洁,减少了样板代码的数量,使得开发者...

    majug-play:带 Play 的 RESTful Web 服务!

    Play 框架利用 Java 的优点,提供了一种简洁、高效的开发环境,支持热部署,使得开发者能够快速迭代应用。 在这个名为 "majug-play-master" 的压缩包中,我们可以预期找到以下内容: 1. **源代码**:项目的 Java ...

Global site tag (gtag.js) - Google Analytics