|
|
1
33
下面是一些让我喜欢斯卡拉的东西(比如,通常的Java): a)类型推断。Java的方式:
…与scala相比是相当冗长的。如果您给出这些列表中的一个,编译器应该能够找出它。 b)一阶函数。同样,这个功能可以用类来模拟,但是它很难看。
c)具有
d)模式匹配和案例类。
e)方差,这意味着如果
再加上一些静态类型的good,我在语言上的销售速度相当快。 |
|
|
2
24
这是一群语言中最好的部分的混合,什么是不值得爱的:
|
|
3
22
scala经常被标榜为拥有闭包和隐式。这并不奇怪,因为缺少闭包和显式类型可能是Java示例文件的两大来源! 但是,一旦你深入研究它,它就远远超出Java而没有恼人的比特,也许Scala最大的力量不是一个特定的命名特征,而是统一其他答案中提到的所有特征的成功。 职务后面向对象和函数编程的结合例如:由于函数是对象,scala能够使map s实现函数接口,因此当使用map查找值时,语法上与使用函数计算值没有区别。在很好地统一这些范例的过程中,scala确实是一种后功能语言。
或者操作符重载,这是通过没有操作符来实现的,它们只是中缀符号中使用的方法。所以
其他特征融合还提到了类型类,它是由更高类型、单例对象和隐式的组合实现的。 协同工作的其他特性是case类和模式匹配,允许您轻松地构建和解构代数数据类型,而不必手动编写Java所要求的所有繁琐的相等、哈希代码、构造函数和吸收器/ SETER逻辑。 默认情况下,指定不变性、提供惰性值和提供第一类函数,这些都结合在一起,为您提供了一种非常适合构建高效函数数据结构的语言。 这个列表还在继续,但是我已经使用scala超过3年了,而且我几乎每天都会惊讶于所有的东西是如何一起工作的。 高效多功能scala也是一种小型语言,其规范(令人惊讶!)只需要大约1/3的Java大小。这部分是因为Java在SCAA中有很多特殊的例子,Scala简化了,部分原因是移除了诸如图元和运算符之类的特征,部分原因是许多功能已经从语言迁移到T。他在图书馆。 因此,scala库作者可以使用的所有技术对任何scala用户都是可用的,这使得它成为定义自己的控制流结构和构建dsl的好语言。这在像Akka这样的第三方演员框架项目中已经得到了很好的应用。 深的最后,它扩展了所有编程风格。 运行时解释器(称为repl)允许您在交互式会话中非常快速地探索想法,scala文件也可以作为脚本运行,而无需显式编译。当与类型推断结合使用时,这给scala一种动态语言的感觉,比如ruby、perl或bash脚本。 另一方面,traits、类、对象和self类型允许您构建一个基于不同组件和使用依赖注入的全面企业系统,而无需第三方工具。Scala还与Java库集成在一个几乎与本地Java相当的级别上,通过在JVM上运行可以充分利用该平台上提供的所有速度优势,以及在Tomcat或OSGi等容器中完全可用。 |
|
|
4
15
我刚来斯卡拉,但我的印象是: 真正好的jvm集成将是驱动因素。JRube可以调用Java,Java可以调用JRuBy代码,但是它明确地调用了另一种语言,而不是Scala Java的干净集成。因此,您可以使用Java库,甚至在同一个项目中混合和匹配。 当我意识到驱动下一个伟大语言的东西是容易并发时,我开始关注scala。从性能角度看,jvm具有良好的并发性。我相信有人会说erlang更好,但是scala实际上对于普通程序员来说是可用的。 Java掉下来的原因是它太冗长了。创建和传递函子需要的字符太多。scala允许将函数作为参数传递。 在Java中创建联盟类型或应用接口到现有类是不可能的。这两个在斯卡拉都很容易。 静态类型通常会对冗长性造成很大的影响。scala消除了这一缺点,同时仍然提供了静态类型的优点,即编译时类型检查,它使代码辅助编辑器变得更容易。 扩展语言的能力。数十年来,这一直是Lisp的动力所在,这也使得RubyonRails得以发展。 |
|
|
5
10
类型系统实际上是scala最显著的特性。它也有很多语法上的便利,比如说Java。 但对我来说,scala最引人注目的特性是:
实际上,这些特性使您可以近似(并在某些方面超过)haskell的 type classes . 结合起来,它们可以让您编写非常模块化的代码。 |
|
|
6
6
很快:
我觉得它所有的壮丽特征都特别吸引人,尤其是:
|
|
8
4
据说让scala代码运行起来很容易 concurrently 在多个处理器上。 |
|
9
4
控制流的表现力。例如,有一个需要以某种方式处理的数据集合是非常常见的。这可能是一个交易列表,其中的处理包括按某些属性(投资工具的货币)分组,然后进行求和(可能得到每种货币的总数)。 在爪哇中,这包括分离出一段代码来完成分组(循环的几行),然后另一段代码来完成求和(另一个循环)。在scala中,这类事情通常可以在使用函数式编程的一行代码中实现,然后是折叠(folding)。 当然,这只是一个关于Java的函数语言的论证。 |
|
|
10
4
scala的伟大特性已经被提到。不过,有一件事是贯穿过去所有功能的,那就是所有功能的整合是多么的雅致。 scala成功地成为了最强大的语言之一,而没有一种匆匆忙忙地附加功能的感觉。语言也不是证明一个观点的学术练习。创新和真正先进的概念被引入到语言中,具有不可思议的实用性和优雅性。 简而言之:马丁·奥德斯基是一个纯粹的设计天才。这就是斯卡拉的伟大之处! |
|
|
11
3
我想添加多范型(oo和fp)特性,这使scala比其他语言更具优势 |
|
|
12
3
每天你编写Java代码,你会变得越来越痛苦,每天你对Scala进行编码,你会变得更快乐。 |
|
|
13
1
以下是一些对函数式语言吸引力的相当深入的解释。 How/why do functional languages (specifically Erlang) scale well? |
|
|
14
1
如果我们放弃对特性的讨论,转而讨论样式,我会说这是流水线式的编码。从某个对象或集合开始,键入dot and property或dot and transformation,直到形成所需的结果。这样就很容易写出一系列易读的信息。在某种程度上,traits还允许您应用相同的方法来构造类型。 |