先看目录:
重点研究这几个:
1.总览
2.REPL
3.变量类型
4.流程控制
5.类
6.方法
7.特质
8.集合类
1.Scala的概述。
进入本文的前提是SDK环境安装完成。
多方查看,不如从源头开始!!!
打开官方文挡地址:
Scala官方文档
查看一下,这个Scala的语言特征:(Overview)
1.是一门高级语言
2.静态类型
3.语法简洁但还是可读——称其表达式
4.支持面向对象(OOP)范式编程
5.支持函数式(FP)编程
6.推理系统复杂
7.Scala编译后的.calss文件,运行在Java虚拟机上(JVM)
8.Scala轻松使用Java的库
2.Hello, World!
遵循传统:
第一个程序,源码
object Hello extends App{
print("Hello, World!")
}
运行:
scalac Hello.scala
得到如下图文件:
如果你用过Java,这个scalac 类似javac。
编译形成的两个文件。运行Hello.class
成功!!
3.REPL
Read-Evaluate-Print-Loop,这个功能,我们可以实现交互式编程。
可以像使用命令行一样来运行。
键入scala,就进入REPL模式。
举例:
(注:可以观察到scala的变量,不一定需要输入数据类型。)
4.两种变量类型
val:标记常量,值不可变。(value)
var:标记变量,值可变。(variety)
5.变量声明
Scala的变量声明放在变量名后面,且用冒号隔开。
注:Scala中没有没有像Java数据类型中的基本类型和包装类的差别。
6.流程控制
if/else
//Scala的if/else与其它语言类似:
if(test1){
doA
}else if(test2){
doB
}else {
doD
}
值得注意的是:在Scala中,if/else语句,是可以有返回值的
val x = if (a < b) a else b
匹配表达式:
//这个类似Java中的swith/case,Scala中支持Int/bool/String
val result = i match {
case 1 => "one"
case 2 => "two"
case _ => "not 1 or 2"//下划线表示除上述以外的所有值
}
val booleanAsString = bool match {
case true => "true"
case false => "false"
}
def getClassAsString(x :Any):String = x match {
case s: String => s + "is a String"
case i: Int => "Int"
case f: Float => "Float"
case l: List[_] => "List"
case p: Person => "Person"
case _: => "Unknown"
}
**try/catch异常捕获:**类似Java,但是其语法格式,可以有多个case
try {
writeToFile(text)
} catch {
case fnfe: FileNotFoundException => println(fnfe)
case ioe: IOException => println(ioe)
}
for 循环
在Scala中去掉了"++/–"运算符,语言作者,认为这两个运算符容易造成混淆。
for (arg <- args) println(arg)
// "x to y" syntax
for (i <- 0 to 5) println(i)//步长为1
// "x to y by" syntax
for (i <- 0 to 10 by 2) println(i)//步长为2,可以实现自定义步长
//这也是一个简洁的表达。
也可以运用表达式计算
val x = for (i <- 1 to 5) yield i * 2
用for循环遍历 List
val fruits = List("apple", "banana", "lime", "orange")
val fruitLengths = for {
f <- fruits
if f.length > 4
} yield f.length
while循环
类似Java
// while loop
while(condition) {
statement(a)
statement(b)
}
// do-while
do {
statement(a)
statement(b)
}
while(condition)
7.类
Scala的类关键字class,并且,class可以传参数。举例如下,其实有点像Java中的构造方法。
class Person(var firstName: String, var lastName: String) {
def printFullName() = println(s"$firstName $lastName")
}
上面这个类的使用方法如下:
val p = new Person("Julia", "Kern")
println(p.firstName)
p.lastName = "Manes"
p.printFullName()
注意:在Scala中没有必要创建get来获取属性,或者set方法来设置属性。
举例:
class Pizza (
var crustSize: CrustSize,
var crustType: CrustType,
val toppings: ArrayBuffer[Topping]
) {
def addTopping(t: Topping): Unit = toppings += t
def removeTopping(t: Topping): Unit = toppings -= t
def removeAllToppings(): Unit = toppings.clear()
}
注:ArrayBuffer 类似Java的 ArrayList.
8.方法
class中,也有方法的定义。关键字def。
def sum(a: Int, b: Int): Int = a + b
def concatenate(s1: String, s2: String): String = s1 + s2
无返回值的方法
def sum(a: Int, b: Int) = a + b
def concatenate(s1: String, s2: String) = s1 + s2
使用如上方法
val x = sum(1, 2)
val y = concatenate("foo", "bar")