安装配置scala
首先scala是基于java开发环境的扩展,系统首先需要保证配置好jre和jdk。官方推荐使用java 6 以上版本, 但事实在即将发布的新版本scala 2.12版本中, 只会支持 java 8, 所以我在这里也首先安装了java 8 jdk。
scala需要安装的组件分为两部分, 我的开发环境是在mac下, 所以使用了brew的方法进行了安装, 命令分别是:
brew install scala
brew install sbt
如果系统并没有安装brew,可以去 http://brew.sh/ 进行安装, 步骤很简单。
安装完成之后, 在终端中可以分别执行 scala
和 sbt
命令。
sbt 是 Scala Build Tool
的简称在这里可以进行编译,测试和运行你所写好的scala程序。scala 终端是一个方便的脚本翻译环境,它提供了免编译直接运行的功能。
Scala程序快速入门
例:快速计算字符串长度
scala> "you have a long string".length
res0: Int = 22
提示:sbt 命令的具体命令可以键入 help 指令查看
例: scala的基本程序
scala> val s = "Hello, world!"
s: String = Hello, world!
scala> println(s)
Hello, world!
scala> 1 + 1223
res1: Int = 1224
scala> s.contains("hello")
res2: Boolean = false
scala> :q
定义一个字符串之后, 系统返回了资源或者资源号 在这里可以直接连续操作多次
scala> 8 + 10 * 2
res0: Int = 28
scala> res0 * 3
res1: Int = 84
scala> "test string"
res2: String = test string
scala> res2.
regionMatches toString
codePointCount getChars replace toUpperCase
codePoints indexOf replaceAll ...
在使用资源时,在.
号之后按 tab
键 可以显示当前可用的方法名。严格意义上讲,scala程序并不是一个解释型语言。但是经过特殊设计的解释器可以正确执行脚本语句,这个性能被称作评读取-评估-打印-循环 (Read-Eval-Print-Loop) 简称 REPL
scala中,关键字 val
用来定义一个常量, 而变量则用 var
来定义,如果尝试更改 val
类型的值,则会报错,例如
scala> val pi = 3.1415926
pi: Double = 3.1415926
scala> var tmp = 4
tmp: Int = 4
scala> tmp = 10
tmp: Int = 10
scala> pi = 2
<console>:8: error: reassignment to val
pi = 2
^
在以上例子中,我们已经使用了很多scala的数据类型 例如 Int
, String
, Double
。 scala中不需要指定数据类型,系统会根据值来判断。
例: 各类型转字符串
scala> 1.toString()
res5: String = 1
例: 生成一个范围数组
scala> 1.to(10)
res6: scala.collection.immutable.Range.Inclusive = Range(1, 2, 3, 4, 5, 6, 7, 8, 9, 10
例: 求字母交集
scala> "helloadsf".intersect("world")
res8: String = lod
在scala中,数据之间的类型转换可以使用 .toInt
, .toChar
, .toString
进行操作, 具体可方法可参见scaladoc
运算符
scala中的运算符与其他语言大同小异 + - * / %
为基本运算符,& | ^ >> <<
为位运算符。 在scala中一切都是对象,所以当我们见到如下形式的表达式 1 + 2
的时候, 要明白其实这是 a.+(b)
的一个缩写。 在 1
这个对象下存在一个 +()
的方法。
注意, 在scala下不存在 ++
, --
自增自减运算符, 相关操作可以使用 +=
-=
来完成。 例如:
scala> var i = 0
i: Int = 0
scala> i += 1
scala> println(i)
1
scala> i -= 2
scala> println(i)
-1
scala 无法实现自增自减运算符的原因是 int
类型是 Immutable
类型。
下面我们看看scala导入包和使用函数的方法
scala> import scala.math._
import scala.math._
scala> sqrt(2)
res14: Double = 1.4142135623730951
scala> pow(2, 4)
res15: Double = 16.0
scala> min(3, Pi)
res16: Double = 3.0
scala调用函数的方法和其他语言一致, 在导入函数所在的包的时候,替换了java的 *
号通配符而使用了下划线 _
。 我们将在以后章节更多的测试scala包导入的语法
例:找字符串中不重复的字符
scala> res17.distinct
res18: String = helo
在scala中是很经常把一个语句当做一个函数方式来使用,这也就和C++ 与 Java的如下语法相同
s[i]; // c++ style
s.charAt(i); // java style
在我们scala中,我们可以直接下面的代码来完成相同功能
"nihao"(2)
其实这个格式只是如下格式的缩写:
"nihao".apply(2)
apply
方法有时可以被理解成scala的构造函数。例如:
Array(1, 4, 9, 16) // 构建数组
BigInt("1234324234") //构建bigint类型
在具体构建一个对象时候,可以参考官方文档的apply方法说明
scala 官方开发文档 http://www.scala-lang.org/api/current