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 语法上的明显差异有:
- 不需要分号结尾
- 类型定义开头需大写(与 Haskell 相同)
- 函数定义需
def
开头(与 Python、Ruby 相同) -
return
可以省略
在此值得提醒的是,统计显示,Scala 的代码运行速率仅为 Java 的 8 成。
相关推荐
Scala简介及开发环境配置.md
### Scala 实操教程及演示知识点总结 #### 一、Scala简介 Scala是一种多范式编程语言,融合了面向对象和函数式编程的特性。在大数据处理领域,尤其是Apache Spark项目中,Scala因其强大的功能和灵活性而被广泛采用...
Scala3,也被称为Scala 3或Dotty,是Scala编程语言的一个重大更新,旨在提高其简洁性、可读性和类型安全性。Scala3的发布标志着该语言的进一步成熟,它引入了一系列改进,旨在解决早期版本中的一些痛点,同时保持对...
Scala-2.12.3是Scala的一个特定版本,它包含了对Java 8及更高版本的支持,并提供了性能优化和新功能。 Scala SDK主要包括以下组件: 1. **编译器**:Scala编译器将Scala源代码转换为Java字节码,使得程序可以在...
《Programming In Scala》是一本权威的Scala编程语言教程,它由Martin Odersky(Scala的创造者)、Lex Spoon 和 Bill Venners 共同编写。中文版包含了1到13章的内容,这些章节涵盖了Scala的基础知识和基本应用,适合...
这个压缩包文件"快学scala习题及答案详解"显然是为学习Scala的人设计的,提供了逐步学习和自我测试的资源。通过章节习题和答案,学习者可以深入理解Scala的核心概念和技术。 首先,我们从标题中可以看到,这是一套...
Scala是一种多范式编程语言,融合了面向对象和函数式编程的概念。它的设计目标是提供一种更高级别的抽象,使得代码简洁、可读性强,并且能够充分利用并发处理。本教程旨在帮助初学者深入理解Scala语言,并掌握其核心...
- **JVM兼容性**:Scala 2.12.x主要针对Java 8及更高版本进行优化,充分利用了JVM的新特性,如Lambda表达式和Stream API。 - **互操作性**:Scala可以直接调用Java库,反之亦然,这得益于良好的Java互操作性。 - ...
9. **Option 类型及使用场景**: - Option 用于处理可能缺失的值,避免空指针异常,分为 Some 和 None 两种情况。 10. **Scala 语言特点**: - 函数式编程:支持高阶函数、尾递归优化等。 - 面向对象:支持类、...
"readme.txt"通常包含课程的简介、学习路径建议或者注意事项,对于整体理解和学习进度规划有着重要的指导作用。 总的来说,这个Scala学习课件全面覆盖了从基础到高级的Scala编程知识,并且特别强调了在Spark环境下...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的概念。这个"scala-2.12.10.zip"文件是Scala编程语言的特定版本——2.12.10,专为Windows操作系统设计的安装包。Scala 2.12.x系列是该语言的一个...
Scala是一种强大的多范式编程语言,它结合了面向对象和函数式编程的特性。MyBatis则是一款流行的Java持久层框架,主要用于简化数据库操作。在本项目中,"scala + mybatis 数据库查询",我们将探讨如何将Scala与...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性,使得它在处理并发和大数据分析方面表现出色。"Scala实战高清讲解"这本书是学习Scala的宝贵资源,尤其对于那些希望深入理解并提升Scala技能的...
- Scala的发展汲取了多种语言的优点,融合了过去几十年计算机语言发展的精华。 - 它的设计目标是为了简化编程,提供一种更为高效、灵活且易于学习的语言。 3. **应用场景**: - 数据科学与大数据处理:由于其...
### Scala语法简明教程知识点详解 #### Scala语言简史 - **诞生历史**:Scala起源于瑞士联邦理工学院洛桑(EPFL),由Martin Odersky在2001年开始设计,其灵感来源于Funnel——一种结合了函数式编程思想与Petri网...
Scala是一种强大的多范式编程语言,它融合了面向对象和函数式编程的特性。这个"scala学习源代码"的压缩包文件很可能包含了用于教学或自我学习Scala编程的基础示例。让我们深入了解一下Scala语言的关键概念和特性。 ...