2.1聲明值和變量
val定義的值是不可變的麻献,類似于一個(gè)常量。
var聲明的變量是可變的症歇。
2.2常用類型
Scala有8種數(shù)據(jù)類型:
Byte郎笆、Char、Short忘晤、Int宛蚓、Long、Float德频、Double以及Boolean苍息。
Scala并不區(qū)分基本類型和引用類型,所以這些類型都是對象壹置,可以調(diào)用相對應(yīng)的方法竞思。
String直接使用的是java.lang.String.String在需要時(shí)能隱式轉(zhuǎn)換為StringOps.
每一種數(shù)據(jù)類型都有對應(yīng)的Rich*類型,如RichInt钞护、RichChar等在Scala中通過方法進(jìn)行類型轉(zhuǎn)換盖喷,不像Java的強(qiáng)制類型轉(zhuǎn)換。
Scala中难咕,所有的值都是類對象课梳,而所有的類,包括值類型余佃,都最終繼承自一個(gè)統(tǒng)一的根類型Any暮刃。
1)Null是所有引用類型的子類型,Null類只有一個(gè)實(shí)例對象爆土,null
2)Nothing椭懊,Nothing是所有類型的子類型〔绞疲可以作為沒有正常返回值的方法的返回類型
3)Unit類型類似于Java里的void氧猬。Unit只有一個(gè)實(shí)例,()坏瘩,這個(gè)實(shí)例也沒有實(shí)質(zhì)的意義盅抚。
2.3算術(shù)和操作符重載
scala中運(yùn)算符都是方法
注:Scala中沒有++、--操作符倔矾,需要通過+=妄均、-=。
2.4調(diào)用函數(shù)和方法
調(diào)用函數(shù):需要引入函數(shù)包 import 包名._ _是通配符哪自,等同于java中的*
調(diào)用靜態(tài)方法:Scala 中沒有靜態(tài)方法丰包,通過單例對象或者伴生對象實(shí)現(xiàn)。
調(diào)用對象方法:對象實(shí)例調(diào)用方法
2.5 apply提陶、update方法
apply方法是用于構(gòu)造和獲取元素
Array(1烫沙,2,3)等同于Array.apply(1隙笆,2锌蓄,3)
update方法用于元素的更新,
arr(4)=5等同于arr.update(4撑柔,5)
2.6 option類型
Scala為單個(gè)值提供了對象的包裝器瘸爽,表示那種可能存在也可能不存在的值。
一個(gè)是Some铅忿,表示某個(gè)值剪决,另外一個(gè)是None,表示為空,通過Option使用
import org.scalatest.FunSuite
//繼承函數(shù)套件FunSuite
class Chapter01Test extends FunSuite {
test("ch0101") {
//var 聲明一個(gè)變量 變量可以被改變
var index: Int = 1
index = index + 1
println(index)
//val 聲明一個(gè)常量 常量不能再次被賦值
val PI: Double = 3.14
println(PI)
//同時(shí)聲明多個(gè)變量
var i, j = 0
println(i + j)
var str1, str2 = null
}
test("ch0102") {
//隱式轉(zhuǎn)換 整數(shù)轉(zhuǎn)換為字符串
var str: String = 1.toString
println(str)
//浮點(diǎn)類型之間的轉(zhuǎn)換 不需要使用強(qiáng)制類型轉(zhuǎn)換
var money: Double = 90.11.toInt
println(money)
var hello: String = "hello"
//string隱式轉(zhuǎn)換為StringOps
println(hello.intersect("world"))
}
test("ch0103") {
//scala沒有 ++ --操作
var count: Int = 1
count += 1
println(count)
//scala提供bigInt bigDecimal操作
var x: BigInt = 123456
println(x * x * x)
}
test("ch0104") {
//函數(shù)的調(diào)用 先引入 然后作為一等公民直接調(diào)用
import scala.math._
println(sqrt(4))
//調(diào)用static方法 通過類名類調(diào)用
BigInt.probablePrime(100, scala.util.Random)
//調(diào)用對象的方法 通過對象來調(diào)用
var str: String = "Hello World"
println(str.toLowerCase)
}
test("ch0105") {
//聲明一個(gè)數(shù)組
var array = Array(1, 2, 3)
//通過apply方法 構(gòu)造獲取元素 等價(jià)于上面的簡寫形式
var array2 = Array.apply(1, 2, 3)
//更新元素的方法
array(0) = 4
//通過update方法來更新元素
array2.update(0, 4)
//apply方法獲取元素 update更新元素
println(array.toString)
println(array2.toString)
}
test("ch0106") {
//對象包裝器Option 存在2個(gè)選項(xiàng) 存在 some 不存在none
//可以通過模式匹配的方式來獲取
var scores = Map("jim" -> 1, "Green" -> 2)
scores.get("jim") match {
case Some(score) => println(score)
case None => println("no score")
}
}
}