![c9b374a74ce542c2966ffc0809674599.png](https://i-blog.csdnimg.cn/blog_migrate/290ca5de70094ab95b20de0fe456fe51.png)
阅读说明
- 本教程面向有一定编程经验的开发者。
- 本教程预计花费30min
语言说明
scala是基于java开发的,结合了面向对象编程技术及函数式编程技术。scala的静态类型避免了复杂程序的大部分BUG。它的JVM和Js运行环境让你可以构建高性能系统。
开始
0. 基础
0.1 设定Scala
- 下载Scala - http://www.scala-lang.org/downloads
- 把包解压到你喜欢的目录,并把目录加入环境变量
- 命令行查看版本
scala -version
0.2 尝试REPL
Scala有一个命令行叫做REPL,可以实现交互式编程。命令行键入scala
,进入交互式编程环境。
$ scala
scala>
// 默认情况下每个键入的表达式都将保存为一个新的类型。
// 注意在Scala中只有对象类型,Int也为对象。
scala> 2 + 2
res0: Int = 4
// 默认值可以被重用,注意结果显示变量的类型。
// res1值类型为Int,值为6
scala> res0 + 2
res1: Int = 6
// Scala是一个强类型语言。
// 可以使用type指令在不执行表达式情况下检查表达式类型。
scala> :type (true, 2.0)
(Boolean, Double)
// REPL会话可以保存到本地目录
scala> :save /sites/repl-test.scala
// 可以使用load指令加载scala文件
scala> :load /sites/repl-test.scala
Loading /sites/repl-test.scala...
res2: Int = 4
res3: Int = 6
// 可以使用h指令检查最近的输入历史
scala> :h?
1 2 + 2
2 res0 + 2
3 :save /sites/repl-test.scala
4 :load /sites/repl-test.scala
5 :h?
已经学会交互式编程了,现在开始学一点scala。
1. 基本语法
// 这是单行注释
/*
这是多行注释
*/
// 打印,并换行
println("Hello world!")
println(10)
// Hello world!
// 10
// 打印,不换行
print("Hello world")
print(10)
// Hello world10
// 变量声明使用var或者val.
// val声明变量不可变的,var声明变量可变。
val x = 10 // x是10
x = 20 // 报错
var y = 10
y = 20 // y现在是20
Scala是一个静态类型语言,注意到在上述声明中我们并没有指定类型。这是因为Scala具有类型推断的功能。大部分情况下Scala编译器可以推断变量的类型,所以可以不用每次都显示声明变量。以下是显示声明变量:
val z: Int = 10
val a: Double = 1.0
// 注意表达式自动从Int转换为Double, 结果是10.0,而不是10
val b: Double = 10
// Boolean值
true
false
// Boolean操作
!true // false
!false // true
true == false // false
10 > 5 // true
// 常规操作
1 + 1 // 2
2 - 1 // 1
5 * 3 // 15
6 / 2 // 3
6 / 4 // 1
6.0 / 4 // 1.5
6 / 4.0 // 1.5
"Scala字符串通过双引号括起来"//String
'a' // a 是一个Scala 字符
// '单引号字符串并不存在
// Strings对象有常用的Java字符串对象的方法。
"hello world".length
"hello world".substring(2, 6)
"hello world".replace("C", "3")
// Strings对象有额外的Scala方法.
"hello world".take(5)
"hello world".drop(5)
// 支持字符串插值,注意前缀"s"
val n = 45
s"We have $n apples" // => "We have 45 apples"
// 插值字符串支持表达式
val a = Array(11, 9, 6)
s"My second daughter is ${a(0) - a(2)} years old."
// => "My second daughter is 5 years old."
s"We have double the amount of ${n / 2.0} in apples."
// => "We have double the amount of 22.5 in apples."
s"Power of 2: ${math.pow(2, 2)}"
// => "Power of 2: 4"
// 使用f前缀实现格式化版本插值字符串
f"Power of 5: ${math.pow(5, 2)}%1.0f"
// "Power of 5: 25"
f"Square root of 122: ${math.sqrt(122)}%1.4f"
// "Square root of 122: 11.0454"
// 原生字符串,忽略特殊字符,使用raw前缀
raw"New line feed: n. Carriage return: r."
// => "New line feed: n. Carriage return: r."
// 有些字符如"需要使用转义
"They stood outside the "Rose and Crown""
// => "They stood outside the "Rose and Crown""
// 三个双引号实现字符串多行编写
val html = """<form id="daform">
<p&g