2.1 基本要素
- 函數(shù)
//一般函數(shù)
fun max(a: Int ,b: Int): Int{
return if(a>b) a else b
}
//表達(dá)式函數(shù)吐辙,函數(shù)體是單個(gè)表達(dá)式構(gòu)成疫稿,可以去掉花括號(hào)和return語(yǔ)句
fun max(a: Int ,b: Int): Int = if(a>b) a else b
//編譯器會(huì)自動(dòng)分析作為函數(shù)體的表達(dá)式,并把它的類(lèi)型作為函數(shù)的返回類(lèi)型
//并且只有表達(dá)式函數(shù)的返回值可以省略
fun max(a: Int,b: Int) = if(a>b) a else b
- 變量
//如果不指定變量類(lèi)型敬惦,編譯器會(huì)自動(dòng)分析初始化器表達(dá)式的值,把值的類(lèi)型作為變量的類(lèi)型
//如果變量沒(méi)有初始化器,需要顯式地指定它的類(lèi)型
//可變變量和不可變量
var a: Int = 42
var a = 42
//對(duì)應(yīng)java的final變量
val a = 42
val a: Int = 42
- 字符串模板
//調(diào)用的java的StringBuilder對(duì)象的方法
val name = "zhangsan"
println("Hello,$name!")
println("Hello,${name}!")
2.2 類(lèi)和屬性
值對(duì)象:只有數(shù)據(jù)沒(méi)有方法的類(lèi)
class Person(val name: String)
- 屬性
class Person{
//聲明只讀屬性:同時(shí)聲明了一個(gè)簡(jiǎn)單的getter方法
val name :String,
//聲明可寫(xiě)屬性:同時(shí)聲明了getter和setter方法
var isMarried: Boolean
}
- 自定義訪問(wèn)器
class Person{
val name: String
get(){
println("復(fù)寫(xiě)了get方法")
return name
}
var isMarried: Boolean
get(){
return isMarried
}
set(married : Boolen){
isMarried = married
}
}
- 目錄和包
Kotlin不區(qū)分導(dǎo)入的是包還是函數(shù)荷鼠,允許使用import關(guān)鍵字導(dǎo)入任何類(lèi)的聲明,也可以導(dǎo)入頂層函數(shù)的名稱(chēng)榔幸。
2.3 枚舉和‘when’
- 枚舉的聲明
enum class Color{
RED,GREEN,BLUE
}
//枚舉類(lèi)可以有屬性和方法
//如果在枚舉類(lèi)中定義任何方法允乐,就需要把枚舉常量列表和方法定義用分號(hào)分開(kāi)
//Kotlin唯一必須使用分號(hào)的地方
enum class Color(val r: Int,val g: Int,val b: Int){
RED(255,0,0),
GREEN(0,255,0),
BLUE(0,0,255);
fun rgb() = (r*256+g)*256+b
}
使用‘when’處理枚舉類(lèi)
‘when’結(jié)構(gòu)中使用任意對(duì)象
when結(jié)構(gòu)允許使用任何對(duì)象作為分支條件使用不帶參數(shù)的‘when’
如果沒(méi)有給when表達(dá)式提供參數(shù),分支條件就是任意的布爾表達(dá)式智能轉(zhuǎn)換:合并類(lèi)型檢查和轉(zhuǎn)換
智能轉(zhuǎn)換:如果你檢查過(guò)一個(gè)變量是某種類(lèi)型削咆,后面就不再需要轉(zhuǎn)化它牍疏,可以直接把它當(dāng)做檢查過(guò)的類(lèi)型使用。
//使用is檢查判斷一個(gè)變量是否是某種類(lèi)型
var name = "我是不是字符串"
name is String
if(name is String){
var n = name as String //顯示地轉(zhuǎn)換是多余的
name.length //智能地轉(zhuǎn)換為String類(lèi)型
}
- 重構(gòu):用‘when’代替‘if’
- 代碼塊作為‘if’和‘when’的分支
“代碼塊中最后的表達(dá)式作為結(jié)果”拨齐,在所有使用代碼塊并期望得到一個(gè)結(jié)果的地方成立
2.4 迭代事物:‘while’循環(huán)和‘for’循環(huán)
- ‘while’循環(huán)
- 迭代數(shù)字:區(qū)間和數(shù)列
‘··’運(yùn)算符標(biāo)識(shí)區(qū)間
val oneToTen = 1··10
//kotlin中的區(qū)間是前后閉合的
- 迭代map
- ‘in’檢查集合和區(qū)間的成員
2.5 Kotlin中的異常
- ‘try’鳞陨、‘catch’和‘finally’
kotlin中不區(qū)分受檢異常和未受檢異常 - ‘try’作為表達(dá)式
小結(jié)
- fun關(guān)鍵字來(lái)聲明函數(shù)。
- var和val關(guān)鍵字分別用來(lái)聲明可變變量和只讀變量
- 字符串模板可避免繁瑣的字符串連接瞻惋。$變量名或者${}來(lái)包圍一個(gè)表達(dá)式
- 值對(duì)象類(lèi)在kotlin中以簡(jiǎn)潔的方式表示
- if是帶返回值的表達(dá)式
- when表達(dá)式比switch更強(qiáng)大
- 編譯器智能轉(zhuǎn)換類(lèi)型
- 區(qū)間的創(chuàng)建