Java程序员为什么应该学习 Scala 和函数式编程?

扫码关注《Java学研大本营》,加入读者群,分享更多精彩

读者经常问我的问题之一是, “Java 开发人员应该学习 Scala 吗? Scala 是否有比 Java ? 为什么 Java 开发人员应该学习 Scala”等等?

首先,让我们对比以下两段代码。

public class Book {
private final String name;
private final double price;

public Star(String name, double price) {
this.name = name;
this.price = price;
}

@Override
public int hashCode() {
int hash = 7;
hash = 23 * hash + Objects.hashCode(this.name);
return hash;
}

@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}

if (getClass() != obj.getClass()) {
return false;
}

final Test other = (Test) obj;

if (!Objects.equals(this.name, other.name)) {
   return false;
}

if (Double.doubleToLongBits(this.price) != Double.doubleToLongBits(other.price)) {
  return false;
}
return true;
}

@Override\
public String toString() {\
 return "Test{" + "name=" + name + ", price=" + price + '}';
}

}

但是,您可以使用 Scala 的案例类编写相同的内容:

case class Book(name: String, price: double)

可能有很多原因 学习 Scala ,比如你被迫学习它,因为它已在你刚加入的新公司中使用过,或者你的解决方案架构师决定将它用于你将要从事的新项目,但那是另一回事。

在这里,我们将讨论一些 原因 应该鼓励 Java 开发人员学习 Scala 的。

Scala 已成为近来最强大的 Java 替代品之一。 它一直 JVM 语言 是首选 Groovy 和 Kotlin 远远落后,并且是人们最想用它编写代码的首选语言。

Scala 有很多优点,最强大的是它是一种 多范式语言 。

除了可用于利用多核 CPU 架构的函数式编程惯用语的优势之外,Scala 还具有流行 的面向对象 范式的正确组合。

它不仅解决了 Java 的许多问题,例如少到没有样板,而且还提供了该语言中的一些最佳实践和模式,例如使用 val 关键字的不变性和 case类。

尽管提供了像 Python 这样的动态语言的流畅性和灵活性,但它仍然是一种强静态类型的语言,可以防止你做坏事,这只会在动态语言的运行时发生。

我相信 Scala 开发人员会在此列表中添加更多理由,但作为 Java 背景和 Java 的热心支持者,我认为 Scala 绝对可以提供一些东西,以下原因对于 Java 开发人员 学习 Scala 。

事不宜迟,以下是我列出的程序员应该学习 Scala的 10 个理由:

1. 多范式语言

Scala 与 Java 有点不同,因为它支持两种编程范式:面向对象编程 ( OOP ) 和函数式编程 ( FP )。

为了提高您的编程技能,最好从不同的范式中学习至少一种语言,例如命令式、逻辑、函数式和 OOP ,而 Scala 让您有机会一起探索函数式和 OOP。

The Pragmatic Programmer 这本书还建议您每年学习一门新的编程语言。

Scala 允许您定义与数据属性(类的行为类似于 C++ / Java 类)和行为属性(与 Java 接口对应的特征)相关的类型。

就像在其他函数式编程语言中一样,在 Scala 中, 函数是一等公民 (这意味着您可以将它们作为值传递),并且 Scala 还支持匿名函数和柯里化(多参数函数的部分应用)。

这种特性的组合使得编写非常简洁和优雅的 Scala 程序成为可能。 多范式是 Scala 最强大的卖点之一,Java 8 也尝试过引入 lambda 表达式(请参阅 Java SE 8 新特性 ),但它仍然落后了几步。 我认为,Scala 将永远比 Java 更实用,但这是另一个争论的话题。

2. 与 Java 的互操作性

在我看来,Scala 选择与 Java 互操作是 Scala 发生的最好的事情。 Scala 在 Java 虚拟机 ( JVM ) 上运行,并且可以与 Java 代码很好地互操作。

这也意味着 Scala 开发人员可以直接从 Scala 代码中使用 Java 库。

鉴于许多 Java 开发人员正在转向 Scala,这是利用他们在实际 Java 编程方面多年经验的完美方式。

也可以从 Java 调用 Scala 代码,您可以轻松地用 Scala 编写程序的一部分,而用 Java 编写其余的程序。

简而言之,与 Java 为 Scala 提供了成为主流企业编程语言的巨大潜力,因为世界上很多代码都是用 Java 编写的,而且全世界有很多开发人员都在使用 Java 。

3. 最佳实践和模式内置语言

关于 Scala,您可能不知道的一件事是,它最初是在瑞士大学 EPFL 开发的,旨在将编程语言研究中的最新创新应用到一种能够获得主流牵引力的语言上,就像 Java 一样。

语言本身内置了一些最佳实践和模式,例如 val 声明顶级 不变性 ,这比 Java 中重载的 final 关键字或 C# 与之相关的奇怪规则要好得多。

它还有 案例类 ,这使得在 Scala 中创建不可变类变得容易。

Scala 还提供闭包,这是 Python 和 Ruby 从函数式编程范式中采用的特性。

4.表现力

当您像我在上一篇关于 Scala 和 Java 之间差异的文章中所做的那样比较 Scala 和 Java 时,Scala 肯定比 Java 得分高。

Scala 天生就具有很强的表现力。 还有大量用 Scala 。

这吸引了越来越多的 Java 开发人员学习 Scala,他们喜欢编写漂亮 干净的代码 。

给大家一个思路,这里是用Java和Scala编写的 字数统计程序 ,你可以自己看看语言表达能力的不同。

Scala 仅用一行代码就实现了 Java 需要 10 多行代码才能实现的目标。

Scala代码更清晰简洁

顺便说一句,可以通过使用 Java 8 的 等 lambdas 和 stream ,但在本示例中未使用这些特性,但在简洁和干净的代码方面,Scala 的得分仍然高于 Java。 5.适销对路

哪个程序员不想有市场? 一个原因 新技术 总是更好的工作和职业发展。

学习 Scala 肯定会让你更有市场。 如今,许多公司都在使用或迁移到 Scala,包括 Twitter、LinkedIn、Foursquare 和 Quora。

考虑到 Scala 作为一种可扩展语言的营销方式,大型投资银行和金融机构开始关注 Scala 的低延迟解决方案的日子不远了。

与Effective Java中给出的建议类似,Twitter已经将在Scala中开发程序的最佳实践作为Effective Scala来分享。

Quora的创始人为了使用Scala,花了几个月的时间建立了一个Scala网络框架。

Martin Odersky Scala 背后的人 Lightbend ,该公司的正式名称为 Typesafe,用于支持商业 Scala 开发。

一切都朝着正确的方向发展,让 Scala 成为 Java 的主要替代品。

6. 静态类型

一般来说,像 Java 这样的静态类型语言可以防止程序员做坏事,而对于像 Python ,只有在运行程序时才知道坏事。

Scala 两全其美。 它感觉是动态的,但它是强静态类型的。 Scala 编译器非常聪明,可以最大限度地使用类型推断。

中的有限类型推断要好得多 Java 和 C# 。

7. 不断增长的框架

您可能对生态系统了解的一件事是 Scala 正在成长。 有很多优秀的 Scala 库和框架出现。

已经开始使用 Scala 的公司也为 Scala 作为主流语言的近期发展做出了贡献。

有一些不错的 Scala Web 框架 ,包括 Lift 和 Play。

Akka 是另一个基于 Scala 的并发框架,它已经将自己确立为一个工具包和运行时,用于在 JVM 上构建高度并发、分布式和容错的事件驱动应用程序。

Scala 还 大数据领域 与 Apache Spark ,这进一步推动了许多对大数据感兴趣的 Java 开发人员采用它。

8. 成长中的社区

随着语言和相关框架的发展,Scala 社区也在不断发展壮大。 许多程序员,包括 Java 开发人员 ,都加入了 Scala 的行列。

中有更好的支持 Eclipse 和 IntelliJ 。 在 SBT、Maven 和 Ant 中也有很好的构建工具支持。

在最近的调查中,Scala 也被吹捧为 Java 的第一选择。 在我看来,要将 Scala 发展为 Java 的真正替代品,鉴于 Java 8 还具有 函数式编程 支持,它必须吸引越来越多的 Java 开发人员。

让像 Twitter 这样的大组织采用 Scala 肯定会对社区有所帮助,因为它们拥有更多的资源和影响力。

9. 简洁的语法

长期以来,Java 因其冗长且样板繁重的语法而受到批评。 尽管它使 Java 更具可读性,就像英语一样,但 Scala 在简洁和可读性方面树立了新的标杆。

Scala 编译器,称为 scalac(记住 javac )的功能超出了您的预期。 它可以为你生成 toString() 、 equals() 、 hasCode() 和其他东西。 考虑用 Java 和 Scala 编写的同一类的两个代码片段,以帮助您做出选择:

public class Book {
private final String name;
private final double price;

public Star(String name, double price) {
this.name = name;
this.price = price;
}

@Override
public int hashCode() {
int hash = 7;
hash = 23 * hash + Objects.hashCode(this.name);
return hash;
}

@Override
public boolean equals(Object obj) {
if (obj == null) {
return false;
}

if (getClass() != obj.getClass()) {
return false;
}

final Test other = (Test) obj;

if (!Objects.equals(this.name, other.name)) {
   return false;
}

if (Double.doubleToLongBits(this.price) != Double.doubleToLongBits(other.price)) {
  return false;
}
return true;
}

@Override\
public String toString() {\
 return "Test{" + "name=" + name + ", price=" + price + '}';
}

}

您可以使用 Scala 的案例类编写相同的内容:

case class Book(name: String, price: double)

顺便说一句,您还可以使用 Lombok 库 (Java 开发人员必不可少 )来删除与 getter、setter、equals、hashCode 和 toString 相关的样板代码。 它可以自动为您生成这些。

10. 与 Haskell 等其他函数式编程语言相比更容易学习

对于 Java 开发人员而言,学习 Haskell 或 OCaml 等经典函数式编程语言要比 Scala 困难得多。

换句话说,[Scala]由于其 OOP 功能而相对容易学习。

在花时间学习函数式编程的同时,Java 开发人员仍然可以利用他们现有的 OOP 。 与 Java ,Scala 具有简洁的语法、漂亮的库、良好的在线文档,并且业内有很多人在使用它。

随着论坛上 Scala 社区的不断壮大,找到任何 Scala 问题的答案并不难,这增加了您的学习体验。 结论

一旦你开始学习 Scala,我相信你会爱上它。 它不仅有更干净的 OO 代码,而且还有功能性能力,感觉是动态的(就像 Python ),但它还有一个静态类型系统,可以防止你做坏事。

如果您需要一些免费资源,您可以查看 Scala Programming Mini Boot camp For Beginner --- A #FREE Course 开始您的 Scala 之旅。

参考文章: https://dev.to/javinpaul/why-java-programmer-should-learn-scala-and-functional-programming-5hej

推荐书单

《项目驱动零起点学Java》

购买链接:https://item.jd.com/13607758.html

《项目驱动零起点学Java》贯穿6个完整项目,经过作者多年教学经验提炼而得,项目从小到大、从短到长,可以让读者在练习项目的过程中,快速掌握一系列知识点。

作者是国内知名Java教学者和传播者,一路披荆斩棘,兢兢业业20余年。积累了丰富的“培”“训”经验,也产出了很多优质的教学理论。

Java语言经过数十年的发展,体系逐渐变得庞大而复杂,本书芟繁就简,提炼出了最为重要的知识点,可以让读者轻松上手。本书配套有专栏课程,课程中提供了扩展内容。

《项目驱动零起点学Java》共分 13 章,围绕 6 个项目和 258 个代码示例,分别介绍了走进Java 的世界、变量与数据类型、运算符、流程控制、方法、数组、面向对象、异常、常用类、集合、I/O流、多线程、网络编程相关内容。《项目驱动零起点学Java》总结了马士兵老师从事Java培训十余年来经受了市场检验的教研成果,通过6 个项目以及每章的示例和习题,可以帮助读者快速掌握Java 编程的语法以及算法实现。扫描每章提供的二维码可观看相应章节内容的视频讲解。

精彩回顾

想要代码干净又整洁?这里有十大原则

通过自学成为开发者的 9 种方法

怎么做一个有产品意识的软件工程师?

扫码关注《Java学研大本营》,加入读者群,分享更多精彩

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值