学习Scala和函数式编程的10个理由

为什么要学习Scala?

读者经常问我的一个问题是: “ Java开发人员应该学习 Scala 吗? Scala的未来会比 Java 更好 吗? Java开发人员为什么要学习Scala,等等?

嗯,学习Scala的原因可能很多,例如由于您已在刚加入的新公司中使用它而您被迫学习它,或者您的解决方案架构师决定将它用于您要工作的新项目,但这是一个不同的故事。

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

最近,Scala已成为最强大的Java替代产品之一。 它一直是JVM的首选语言 ,将GroovyKotlin抛在后面,并且因为人们希望使用最多的代码而成为首选语言。

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

除了可以利用多核CPU架构的功能性编程惯用法的优越性之外,Scala还结合了流行的面向对象范例。

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

尽管提供了动态语言(如Python)的流畅性和灵活性,但它仍然是一种强静态类型的语言,可以防止您在运行时使用动态语言发生不良行为。

我确信Scala开发人员会在此列表中添加更多原因,但是由于Java背景和Java的热心支持者,我认为Scala确实可以提供一些东西,并且以下原因对于Java开发人员学习Scala非常有意义。 。

事不宜迟,这是我列出程序员为什么应该学习Scala的10个原因:

1.多天堂语言

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

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

实用程序员》一书还建议您每年学习一种新的编程语言。

程序员实用书

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

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

这些功能的组合使编写简洁而优雅的Scala程序成为可能。 成为多范式是Scala的最大卖点之一,Java 8也尝试通过引入lambda表达式(请参阅Java SE 8 New Features )来尝试这种方法,但是它仍然落后了几个步骤。 我认为,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#中具有关联的怪异规则的const / read-only更好。

它还提供了case类 ,这使得在Scala中创建不可变类变得容易。

Scala还提供了闭包,此功能已从功能编程范例中采用了PythonRuby之类的动态语言。

4.表现力

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

Scala本质上具有很高的表现力。 还有大量用Scala编写的非常漂亮和有用的代码。

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

为了给您带来一个想法,这是用Java和Scala编写的字数统计程序 ,您可以亲眼看到语言表达能力上的差异。

Scala仅用一条线就完成了,而Java则用了10条以上的线来实现。

Scala代码更加清晰简洁

顺便说一下,可以通过使用lambdasstream之类的Java 8功能在Java方面进行改进,但在本示例中并未使用,但在简洁明了的代码方面,Scala在Java方面得分很高。

5.适销对路

哪个程序员不想上市? 学习新技术或框架的一个原因始终是更好的工作和职业发展。

学习Scala肯定会使您更具市场价值。 如今,许多公司正在使用或迁移到Scala,包括Twitter,LinkedIn,Foursquare和Quora。

考虑到Scala的营销是可扩展语言,大型投资银行和金融组织开始寻找Scala的低延迟解决方案的日子已经过去了。

与中的建议相似 有效的Java Twitter已经分享了在Scala中开发程序的最佳实践,即有效的Scala。

Quora的创建者花了几个月的时间来构建Scala Web框架以使用Scala。

Scala背后的人Martin Odersky现在是Lightbend初创公司的背后, Lightbend被正式称为Typesafe,用于支持商业性Scala开发。

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

6.静态类型

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

Scala具有两全其美的优势。 感觉很动态,但是它是强静态类型的。 Scala编译器确实很聪明,并且在最大程度上使用了类型推断。

Scala为变量和函数提供类型推断,比JavaC#中的有限类型推断要好得多。

7.不断增长的框架

您可能对生态系统了解的一件事是Scala正在增长。 有很多不错的库和框架。

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

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

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

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

顺便说一句,如果您对Spark感兴趣,那么您也可以在Udemy上学习从头开始学习Apache Spark课程。

8.成长中的社区

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

越来越多的IDE开始支持Scala语法,并且EclipseIntelliJ中提供了更好的支持。 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; } 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 int hashCode() { int hash = 7; hash = 23 * hash + Objects.hashCode(this.name); return hash; } @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; } @Override public boolean equals(Object obj) { if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } if (getClass() != obj.getClass()) { return false; } final Test other = (Test) obj; if (!Objects.equals(this.name, other.name)) { return false; } if (!Objects.equals(this.name, other.name)) { return false; } if (Double.doubleToLongBits(this.price) != Double.doubleToLongBits(other.price)) { return false; } return true; } if (Double.doubleToLongBits(this.price) != Double.doubleToLongBits(other.price)) { return false; } return true; } if (Double.doubleToLongBits(this.price) != Double.doubleToLongBits(other.price)) { return false; } return true; } @Override public String toString() { return "Test{" + "name=" + name + ", price=" + price + '}'; } @Override public String toString() { return "Test{" + "name=" + name + ", price=" + price + '}'; } }

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

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

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

10.与Haskell和其他函数式编程语言相比,它更易于学习

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

换句话说,Scala具有OOP功能,因此相对易于学习。

在花时间学习函数式编程的同时,Java开发人员仍然可以利用现有的OOP知识在Scala中提高工作效率。 像Java一样,Scala具有简洁的语法,漂亮的库,完善的在线文档以及许多使用它的行业人士。

随着越来越多的Scala社区在论坛上出现,找到任何Scala问题的答案并不难,这增加了您的学习经验。

结论

一旦您开始学习Scala,我相信您会爱上它。 它不仅具有更简洁的OO代码,而且还具有功能,它具有动态感(例如Python),但是它具有静态类型系统,可以防止您做不好的事情。 如果您决定在2018或2019学习Scala,则这里有一些有用的资源可供进一步学习。

  1. 开始Scala编程
  2. Scala:Justin Pihony入门
  3. Java开发人员的Scala作者:Toby Weston
  4. 不耐烦的Scala
  5. Scala中的函数式编程

进入美丽的Scala和函数式编程世界,祝一切顺利。 如果您有任何疑问或反馈,请留下笔记。

如果您喜欢这篇文章,请与您的朋友和同事分享,不要忘记在Twitter上关注javinpaul,在Medium中关注javinpaul!

PS-如果您需要一些免费资源,则可以查看Scala编程迷你入门训练营 -入门课程-#FREE课程,开始您的Scala之旅。

Scala-黑客中午

From: https://hackernoon.com/10-reasons-to-learn-scala-and-functional-programming-2fce385e6ec7

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值