一.定義變量
1.val定義:只能賦值一次
val a: Int = 1;//定義整數(shù)變量
val a = 1;自動(dòng)推斷出 `Int` 類型
val c: Int? // 如果沒(méi)有初始值類型不能省略
2.var定義:可重新賦值
var x = 5;
x+=1;
二.表達(dá)式
1.if表達(dá)式與java一樣這里不說(shuō)了
2.for、while循環(huán):
val items = listOf("apple", "banana", "kiwifruit")
for (item in items) {
? ? println(item)
}
或者:
for (index in items.indices) {
? ? println("item at $index is ${items[index]}")
}
3.when:
相當(dāng)于java的switch,但是功能更強(qiáng)大:
when (x) {
? ? 1 -> print("x == 1")
? ? 2 -> print("x == 2")
? ? 3,4 -> print("x == 3 or x == 4”)//相同處理放在一起用逗號(hào)隔開(kāi)
? ? in 1..10 -> print("x is in the range”)//1到10范圍內(nèi)的
? ? !in 10..20 -> print("x is outside the range”)//不在區(qū)間內(nèi)的
? ?is String -> x.startsWith("prefix”)//檢測(cè)是否為字符串
? ? else -> { // 注意這個(gè)塊
? ? ? ? print("x is neither 1 nor 2")
? ? }
}
三.函數(shù):
fun sum(a: Int, b: Int): Int {
? ? return a + b
}
解釋:
fun:kotlin函數(shù)使用fun關(guān)鍵字聲明
sun:為函數(shù)名
a:為參數(shù)
a:Int:表示int類型的參數(shù)
Int:表示返回類型
返回?zé)o意義的值,有兩種寫法:
1.fun printSum(a: Int, b: Int): Unit {
? ? println("sum of $a and $b is ${a + b}")
}
2.省略Unit:
fun printSum(a: Int, b: Int) {
? ? println("sum of $a and $b is ${a + b}")
}
單表達(dá)式函數(shù):
當(dāng)函數(shù)返回單個(gè)表達(dá)式時(shí),可以省略花括號(hào)并且在?=?符號(hào)之后指定代碼體即可:
fun double(x: Int): Int = x * 2
相當(dāng)于:
fun double(x:Int): Int{
? ? ?return x*2
}
在 Kotlin 中函數(shù)可以在文件頂層聲明,這意味著你不需要像一些語(yǔ)言如 Java、C# 或 Scala 那樣需要?jiǎng)?chuàng)建一個(gè)類來(lái)保存一個(gè)函數(shù)。此外除了頂層函數(shù),Kotlin 中函數(shù)也可以聲明在局部作用域、作為成員函數(shù)以及擴(kuò)展函數(shù)。
函數(shù)類型:
1.局部函數(shù)(即一個(gè)函數(shù)在另一個(gè)函數(shù)內(nèi)部):局部函數(shù)可以訪問(wèn)外部函數(shù)(即閉包)的局部變量
2.成員函數(shù)是在類或?qū)ο髢?nèi)部定義的函數(shù):成員函數(shù)以點(diǎn)表示法調(diào)用:Sample().foo()
四.創(chuàng)建類和實(shí)例
val rectangle = Rectangle(5.0, 2.0) // 不需要“new”關(guān)鍵字
五.為null判斷
1.不為null
val files = File("Test").listFiles()
println(files?.size)//files不為null時(shí)獲取它的size
2.不為null else
val files = File("Test").listFiles()
println(files?.size ?: "empty”)//if不為null打印files的size 否則打印empty
3.不為空?qǐng)?zhí)行
val value = ...
value ?.let{
? ? ?//不為空時(shí)執(zhí)行
}
六.with
定義:將對(duì)象作為函數(shù)的參數(shù),在函數(shù)內(nèi)可以通過(guò) this指代該對(duì)象。返回值為函數(shù)的最后一行或return表達(dá)式。
例如:
var?paint?=?Paint()
paint.color?=?Color.BLACK
paint.strokeWidth = 1.0f
使用with:
var paint = Paint()
with(paint){
? ? ?color = Color.BLACK
? ? strokeWidth = 1.0f
}
var?list=?mutableListOf<String>()
list.add(“1")
list.add(“2")
使用with:
var list = with(mutableListOf<String>()){
? ? ?add(“1")
? ? ?add(“2")
? ? ?this
}
七.空安全
在 Kotlin 中,類型系統(tǒng)區(qū)分一個(gè)引用可以容納?null?(可空引用)還是不能容納(非空引用)。 例如,String 類型的常規(guī)變量不能容納?null:
1.var a: String = "abc"
a = null // 編譯錯(cuò)誤
調(diào)用:
val l = a.length 就不可能會(huì)出現(xiàn)空指針報(bào)錯(cuò)
2.如果要允許為空,我們可以聲明一個(gè)變量為可空字符串,寫作?
String?
:
var b: String? = "abc"
b = null // ok
print(b)
調(diào)用:
val l = b.length // 錯(cuò)誤:變量“b”可能為空,調(diào)用時(shí)編譯器會(huì)報(bào)錯(cuò)
如果一定要調(diào)用需要做判斷,調(diào)用方式:
1.val l = if(b != null) b.length else -1
2.b?.length//b不等于null時(shí)執(zhí)行b.length