scala使用java类
Heiko Seeberger:使我着迷于Scala的是,编写简洁而全面的代码的可能性。 最好的例子是案例类,这些案例类描述具有equals和hashCode的“内置”实现的不可变值对象,以及基本上是“打开类固醇”的模式匹配。 在Akka中,这些功能用于定义参与者对消息的React方式:
```
case class User(id: Long, name: String, email: Email)
case object GetUsers
case class AddUser(name: String, email: Email)
case class RemoveUser(id: Long)
class UserRepository extends Actor {
...
override def receive = {
case GetUsers => // do stuff
case AddUser(n, e) => // do stuff
case RemoveUser(i) => // do stuff
}
...
}
```
Markus Hauck:使我着迷的是Scala,它是JVM上的函数式编程与非常有表现力的类型系统之间的联系。 另一个好处是可以与Java进行互操作,特别是如果您要从不断增长的Java代码库逐步迁移到Scala时,尤其如此。
丹尼尔·韦斯海德(Daniel Westheide):最初是因为我开始使用Java进行编程,但使用的功能略多一些,但最终却对样板感到厌倦。 令我着迷的Scala是强大的类型系统。 两个有趣的示例:借助类型更高级的类型和类型类,可以通过Spark-RDD(一个分布在集群中多个系统上的Collection)和Scala集合进行抽象–然后,我的应用程序逻辑不知道在RDD中运行它,或者在Little Scala Collection上的计算机上本地运行它。 这种所谓的Phantom类型阻止了我对我的Read-Slave-Database进行写访问。
Ivan Kusalic: Scala是一门很棒的语言。 特别适合在企业环境中进行后端处理。
它支持多种编程样式。 我最喜欢的风味是功能和面向对象方法的混合,其中功能性方法提供了不变性和处理流程,而面向对象的方法则允许良好的封装。
Scala是一种极富表现力的语言,也是一种愉快的工作方式。 它允许灵活而安全的设计,而这在大多数其他语言中是无法实现的。 从简单的DSL到真正需要它们的类型类甚至宏。 我觉得我经常可以直接在代码中编码我的想法,而无需繁琐而冗长的翻译。
当然-类型! 我真的无法想象使用不再具有表达类型的语言来工作。
最后,其功能在彼此之上构建得如此之美。 可以将类型类作为设计模式,而不是内置将来。
Daniela Sfregola: 在以前的生活中,我是一名Java开发人员。 我真的很喜欢这种语言,但是几年后,我意识到我想尝试一种更灵活,更具表现力的语言,所以我决定与Scala一起玩(当时,这是很酷的孩子们使用的一种新的闪亮语言。在玩),从那以后我再也没有回头。 在我看来,Scala是一种非常有趣且功能强大的语言,因为它允许程序员确定代码的外观,而不是由语言语法来决定。
Julien Tournay: 我从2009年底开始就喜欢Scala。这时对我的主要吸引力是Java严重缺乏的lambda。 那时创建Play Framework的Guillaume Bort和我都在同一家公司工作。 几月后,纪尧姆(Guillaume)和公司其他成员对Scala产生了兴趣。 我抓住了专业使用该语言的机会,从那以后我再也没有停止过。
随着经验的积累,我喜欢Scala的事情发生了很大变化。
首先,lambda对我来说很自然! 我做了很多JS开发工作,这听起来有些矛盾,但是对我来说,Scala感觉更接近JS,而不是Java。 然后,随着我对它的更多了解。 我发现了类型类,纯函数式编程,类别理论,类型级别编程,逻辑,编程语言理论,而且我还在学习!
我最爱Scala就是旅程。 该语言可帮助您构建更好的程序,并使您“成长”为开发人员。 您会遇到一些实际的问题(“ Java太冗长”,“我想要lambdas”,“我想使用Spark”等),并且在学习语言时,您会接触到一个世界新概念。
这不仅仅是库或工具,还是全新的想法。 起初,它感觉完全不堪重负。 一段时间后,您就喜欢学习了:)
要了解有关React式编程的更多信息,请下载最新一期的《 JAX杂志》:
响应式编程对不同的人意味着不同的事情,我们不打算重新发明轮子或定义这个概念。 相反,我们允许我们的作者证明Scala,Lagom,Spark,Akka和Play如何共存并共同创造一个React性的宇宙。
如果“事件流”的定义不满足您对知识的渴求,请准备好了解响应式编程对我们在Scala,Lagom,Spark,Akka和Play方面的专家意味着什么。 另外,我们与Scala的创建者Martin Odersky进行了交谈,讨论了即将推出的Scala 2.12,该编程语言的当前状态以及等待我们的技术创新。
渴了吗? 打开杂志,看看我们为您准备了什么。
您认为,选择Scala而不是Java的原因是什么?
Heiko Seeberger:如果要将上述示例实现为Java代码,则必须将单行案例类与多个行类(包括字段,getter和“等于”和“ hashCode”的实现)进行切换。 而且,除了模式匹配之外,您还必须使用'instanceof'并键入强制类型转换。 即使某些现代的IDE可以为您提供帮助,但最终的代码却更加冗长和模棱两可。 与Scala不同,Java并不那么关注“ What”。
Markus Hauck: Scala的字体系统。 Java在这方面有严重的弱点,并且它的标准化比实际使用中的帮助更令人困扰。 使用Scala完全是另一回事:使用Scala编译器可以避免很多错误。
丹尼尔·韦斯海德(Daniel Westheide):除了经常提到的功能强大的类型系统之外,还有很多其他原因导致我通常选择Scala而不是Java-我想谈谈其中两个相互连接的问题。 首先,借助Scala,您可以定义代数数据类型。 另一个好处是模式匹配,它使您可以使用可读代码和上述数据类型。 以下示例说明了模式匹配和代数数据类型的实际作用。 我们定义了代数数据类型会话,并区分了登录用户的会话和匿名会话。 我们使用模式匹配来返回个性化建议或常规建议:
sealed trait Session
case class LoggedInAs(userId: String) extends Session
case object Anonymous extends Session
def showRecommendations(session: Session): List[Recommendation] = session match {
case LoggedInAs(userId) => personalizedRecommendationsFor(userId)
case Anonymous => trendingArticles
}
伊万·库萨利克(Ivan Kusalic): 类型安全性,表达性,简洁性,功能范式,抽象能力等。它们只是非常不同的语言。 Scala不仅如此。 这些主题中的每个主题都需要花费数小时才能自行深入探讨。 当然,还需要付出代价-复杂性和陡峭的学习。 和招聘。
有人可能会说速度也是一个原因,但我发现有些误导,因为真正需要针对速度进行优化(而非可读性)的代码量非常小,如果确实需要,甚至可以用Java编写。
但是招聘–与Java相比,这是Scala唯一真正的缺点。 从根本上讲,Scala常常会赢得胜利。
Daniela Sfregola: 尽管Java正在发展以包含更多功能性样式的优点,但是Scala仍具有Java尚未具备的许多功能,并且语法更加紧凑。 这使使用Scala进行编码变得更加有趣和富有成效-尽管我不得不承认,比Java更难学习。
朱利安·图尔奈(Julien Tournay): 对我而言,职业发展的真正挑战是“扩展”项目。 我的意思是继续从事一个越来越大的项目, 并与越来越多的开发人员一起工作。 在我看来,类型系统可以大大缓解此问题。
如果您是Java开发人员,请问自己一个问题:为什么我更喜欢Java,而不是Python或JS?
如果您的回答是“因为我喜欢静态类型的语言”,则您可能应该尝试学习其他语言必须提供的内容。 那里有比Java更好的类型系统的语言。 您当然可以尝试Scala,但也可以尝试Haskell,ML甚至Idris。
Scala具有在JVM上运行的优势,因此从现有Java代码库迁移到Scala更加容易。
翻译自: https://jaxenter.com/expert-checklist-why-scala-and-not-java-129923.html
scala使用java类