Scala

来自开放百科 - 灰狐
跳转到: 导航, 搜索
Wikipedia-35x35.png 您可以在Wikipedia上了解到此条目的英文信息 Scala Thanks, Wikipedia.
Scala-90x90.gif
Lambda.jpg

Scala is a general purpose programming language designed to express common programming patterns in a concise, elegant, and type-safe way. It smoothly integrates features of object-oriented and functional languages. It is also fully interoperable with Java. The Scala distribution is released under a BSD-like license.

Why Scala for Web 2.0?

目录

新闻

Scala-logo.png

自http://www.scala-lang.org/rss.xml加载RSS失败或RSS源被墙

简介

Scala是一门现代的多范式编程语言,志在以简练、优雅及类型安全的方式来表达常用编程模式。它平滑地集成了面向对象和函数语言的特性。

  • Scala是面向对象的:Scala是一个纯面向对象语言,在某种意义上来讲所有数值都是对象。对象的类型和行为是由class和trait来描述的。Class的抽象可由子类化和一种灵活的基于mixin的组合机制(它可作为多重继承的简单替代方案)来扩展。
  • Scala是函数式的: Scala还是一个函数式语言,在某种意义上来讲所有函数都是数值。Scala为定义匿名函数提供了一种轻量级的语法,它支持高阶(higher- order)函数、允许函数嵌套、支持局部套用(currying)。Scala的case类及其内置支持的模式匹配模型代数类型在许多函数式编程语言中都被使用。
  • Scala是静态类型的:Scala配备了一套富有表现力的类型系统,该抽象概念以一种安全的和一致的方式被使用。
  • Scala是可扩展的:Scala的设计承认了实践事实,领域特定应用开发通常需要领域特定语言扩展。Scala提供了一个独特的语言组合机制,这可以更加容易地以类库的形式增加新的语言结构:

o 任何方式可以被用作中缀(infix)或后缀(postfix)操作符

o 闭包按照所期望的类型(目标类型)自动地被构造

两者结合使用可方便地定义新语句,无需扩展语法,也无需使用类似宏的元编程工具。

  • Scala可与Java和.NET进行互操作:Scala 设计时就考虑了与流行编程环境良好交互,如Java 2运行时环境(JRE)和 .NET框架(CLR)。特别是与主流面向对象语言,如Java和C#尽量无缝交互。Scala有像Java和C#一样的编译模型(独立编译,动态装载类),允许访问成千上万的高质量类库。

More Detail: http://www.infoq.com/cn/Scala

哲学

在Scala中,一切都是对象,即使是数值类型(一切值都是对象,一切函数都是值)。Scala更信奉万物皆应为对象。

版本

Scala语言规范

SIP/SPP

JDK

JDK Compatibility

JDK 9

JDK9 Issues

JDK 8

指南

OS X

使用sdkman安装Scala或

sudo port install scala2.10
ls /opt/local/bin/scala*
sudo ln -s /opt/local/bin/scala-2.10 /opt/local/bin/scala
vim /etc/paths , add 
/opt/local/bin
$ scala
scala> :help
scala> (1 to 10) filter (_ % 2 == 0) map (_ * 2) reduce (_ * _)
res0: Int = 122880

vim Hello.scala

object Hello {
  def main(args: Array[String]) {
   println("Hello, world!")
 }
}

运行

scala Hello.scala 或 
scala> :load Hello.scala

编译运行 scalac Hello.scala && scala Hello

Eclipse

从 Eclipse Marketplace 中选择安装 The Scala IDE for Eclipse,来自 scala-ide.org。

从 Help > Install New Software ...

For Scala 2.11.2

http://download.scala-ide.org/sdk/helium/e38/scala211/stable/site

For Scala 2.10.4

http://download.scala-ide.org/sdk/helium/e38/scala210/stable/site

Vim

Emacs

REPL

$ scala

scala> object HelloWorld extends App {
     |   println("Hello, world!")
     | }
defined object HelloWorld
scala> HelloWorld.main(null)

File IO

scala> import scala.io.Source
scala> val source1 = Source.fromURL("http://huihoo.com", "UTF-8")
scala> val lines = source1.getLines.toArray
scala> for (i <- 0 until lines.length) println(i + ": " + lines(i)) // 逐行打印

容器Collection

Scala Collection

斐波那契数列

使用了Stream(流) 它与List类似,只不过其中的每一个元素都经过了一些简单的计算处理 #::

scala> def fibFrom(a: Int, b: Int): Stream[Int] = a #:: fibFrom(b, a + b)
fibFrom: (a: Int, b: Int)Stream[Int]
scala> val fibs = fibFrom(1, 1).take(10)
fibs: scala.collection.immutable.Stream[Int] = Stream(1, ?)
scala> fibs.toList
res32: List[Int] = List(1, 1, 2, 3, 5, 8, 13, 21, 34, 55)

等价性

容器库有标准的等价性和散列法

scala> List(1, 2, 3) == Vector(1, 2, 3) // true
scala> HashSet(1, 2) == TreeSet(2, 1) // ture
scala> Set(1, 2, 3) == List(1, 2, 3) // false

并行容器

Scala标准库中包含的并行容器通过免去并行化的底层细节,以方便用户并行编程。

val list = (1 to 10000).toList
list.map(_ + 42) // 顺序处理
list.par.map(_ + 42) // 并行处理
res2: scala.collection.parallel.immutable.ParSeq[Int] = ParVector(43, 44, 45 ....

并行并发

元编程

Groovy and Scala

  • Scala和Groovy之间的核心区别在于前者是静态类型:静态类型是性能的关键,Scala的性能远高于Groovy
  • Groovy的优势在于易用性以及与Java无缝衔接,Scala的优势在于性能和一些高级特性
  • Groovy团队更注重实效思想而更Scala团队具有学术思想
  • Groovy与Scala若能走向统一, 将为Web开发者带来巨大的生产力

项目

scala ecosystem

.NET

用户

Twitter,Fouresquare以及LinkedIn,它们的Scala应用程序每天都要处理数十亿的Web事务。

课程

文档

图集

关注

Java.png Scala.png Akka.png Play.png Spark.png Slick.png Lagom.png Activator.png Predictionio.png

链接

分享您的观点
个人工具
名字空间

变换
操作
导航
工具箱