[译]Scala快速开始

学习Scala最好的方法取决于你已经会的东西以及你想学习的方式。有很多可供选择的资源,比如书籍,教程,培训课程,演示报告以及使用Scala编译器练习。很多人会找到一种组合方式,一方面准备一本Scala的书籍并且立即开始使用Scala编译器尝试示例。另一方面,你可能想要从Scala培训课程或者使用在线提供的资料开始。
随着你的Scala知识不断增长,你会发现有很多高阶资料和一个非常友好的Scala社区可以帮助你。他们都对Scala富有激情并且热烈欢迎新成员。很多人都为新接触Scala的程序员写了帮助资料,他们会在Scala论坛或个人博客中回复寻求帮助的邮件或者分享新技术、高阶概念或工具。

为编程初学者准备的Scala

如果你刚开始学习编程,你会发现大部分关于Scala的资料都假定你已经有一定的编程经验了。有两个很有价值的资源推荐给编程初学者,它们会带领你进入Scala的世界:

  • 在线课堂Functional Programming Principles in Scala,由Coursera提供。由Scala的创造者Martin Odersky授课,这个网络课堂采用一些学术方法教授函数式编程的基本原理。你会通过解决编程任务学到很多Scala知识。
  • Kojo是一个使用Scala编程来探索和玩数学,艺术,音乐,动画和游戏的交互式学习环境。

你的第一行代码

"Hello World!"程序

作为第一个示例,我们使用标准的"Hello World!"程序来说明在对很多语言知识不了解的情况下如何使用Scala工具。

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

对Java程序员来说,这个程序的结构应该很熟悉,它包含了main函数,可以打印"Hello World!"到标准输出。
我们假设Scala软件和用户环境都已经正确设置好。例如:

环境 变量 值(示例)
Unix $SCALA_HOME /usr/local/share/scala
$PATH \$PATH:\$SCALA_HOME/bin
Windows %SCALA_HOME% c:\Progra~1\Scala
%PATH% %PATH%;%SCALA_HOME%\bin

交互式运行

Scala命令会启动一个交互式shell,在这里Scala表达式可以被交互式地解释执行。

> scala
This is a Scala shell.
Type in expressions to have them evaluated.
Type :help for more information.
scala> object HelloWorld {
    |   def main(args: Array[String]): Unit = {
    |     println("Hello, world!")
    |   }
    | }
defined module HelloWorld
scala> HelloWorld.main(Array())
Hello, world!
scala>:q
>

:q缩写代表内部shell命令:quit,用于退出解释器。

编译

scalac命令会编译一个(或多个)Scala源文件并且生成可以在任何标准JVM上执行的Java字节码。Scala编译器和javacJava SDK的编译器)的工作方式类似。

> scalac HelloWorld.scala

默认地,scalac生成class文件到当前的工作路径中。可以使用-d选项来指定一个不同的输出路径。

> scalac -d classes HelloWorld.scala

执行

scala会使用合适的选项来执行生成的字节码:

>scala HelloWorld

scala允许我们指定命令选项,如-classpath(也可写为-cp)选项:

>scala -cp classes HelloWorld

scala命令的参数必须是一个顶层对象。如果对象扩展了scala.App特征,那么所有包含在这个对象中的语句都会被执行,否则你必须添加一个main函数作为程序入口。
下面是使用App特征的"Hello, world!"程序:

object HelloWorld extends App {
  println("Hello, world!")
}

脚本

我们可能也想让示例作为shell脚本或者批处理命令运行。
bash shell脚本script.sh包含下面的Scala代码:

#!/usr/bin/env scala
object HelloWorld extends App {
  println("Hello, world!")
}
HelloWorld.main(args)

可以直接使用shell命令执行:

> ./script.sh

注意:我们假设这里的script.sh文件有执行权限并且scala命令的搜索路径已经配置在PATH环境变量中了。


最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 203,937评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 85,503评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 150,712评论 0 337
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,668评论 1 276
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,677评论 5 366
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,601评论 1 281
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,975评论 3 396
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,637评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,881评论 1 298
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,621评论 2 321
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,710评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,387评论 4 319
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,971评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,947评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,189评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 44,805评论 2 349
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,449评论 2 342

推荐阅读更多精彩内容