Scala 相比于 Java 的优势在哪里? -问答-阿里云开发者社区-阿里云

开发者社区> 蛮大人123> 正文

Scala 相比于 Java 的优势在哪里?

2016-02-29 16:39:16 2179 1

如题,还是说两个侧重点不同?如果是,希望大神能指点一下。

取消 提交回答
全部回答(1)
  • 蛮大人123
    2019-07-17 18:50:32

    个人觉得比较运行速度其实没啥意义, 因为两种语言都是生成 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 很容易的斜街很多时候弥补了这一点)
    对于程序员来说: Scala 很难学, 但值得学
    对于企业来说: Scala 是过滤优秀(好学)程序员(Geek)的好滤斗.

    0 0
相关问答

40

回答

[@徐雷frank][¥20]什么是JAVA的平台无关性

大河人家 2018-10-29 23:55:20 144293浏览量 回答数 40

162

回答

惊喜翻倍:免费ECS+免费环境配置~!(ECS免费体验6个月活动3月31日结束)

豆妹 2014-10-29 17:52:21 223034浏览量 回答数 162

8

回答

OceanBase 使用动画(持续更新)

mq4096 2019-02-20 17:16:36 333898浏览量 回答数 8

13

回答

[@饭娱咖啡][¥20]我想知道 Java 关于引用那一块的知识

心意乱 2018-10-31 18:44:12 142145浏览量 回答数 13

110

回答

OSS存储服务-客户端工具

newegg11 2012-05-17 15:37:18 292316浏览量 回答数 110

22

回答

爬虫数据管理【问答合集】

我是管理员 2018-08-10 16:37:41 146804浏览量 回答数 22

18

回答

阿里云开放端口权限

xcxx 2016-07-20 15:03:33 643194浏览量 回答数 18

31

回答

[@倚贤][¥20]刚学完html/css/js的新手学习servlet、jsp需要注意哪些问题?

弗洛伊德6 2018-10-27 21:52:43 145641浏览量 回答数 31

42

回答

【精品问答集锦】Python热门问题

小六码奴 2019-05-30 15:27:34 135581浏览量 回答数 42

10

回答

[@墨玖tao][¥20]为什么流式处理框架都是 java 写成的,JVM 是不是在流和批存在着特殊优势。还有分布式资源调度,感觉Mesos 的成长速度跟不上 Yarn。这是为什么?

管理贝贝 2018-10-23 13:18:03 136137浏览量 回答数 10
+关注
蛮大人123
我说我不帅他们就打我,还说我虚伪
0
文章
7733
问答
推荐问答
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载