1壳鹤、空類(lèi)型盛龄、空安全
2饰迹、函數(shù)的基本使用
空類(lèi)型、空安全
1余舶、定義可為空的變量
修飾符 變量名 : 類(lèi)型? = 值
var a: String? = "abcde"
println("$a")
a = null
println("$a")
2啊鸭、判斷空的方式
1 if...else...
2 ?. 當(dāng)a為空時(shí),則不執(zhí)行?后面的代碼,否則執(zhí)行
//1)if..else..
if (a == null) {
println("a為空")
} else {
println("a不為空")
}
//2) ?. 當(dāng)a為空時(shí),則不執(zhí)行?后面的代碼,否則執(zhí)行
println(a?.length)
3、函數(shù)中使用空的情況
fun sumNum(): Int? {
var b: String? = "123465"
return b?.length
}
4匿值、let操作符
1. let操作符的作用:當(dāng)時(shí)用符號(hào)?.驗(yàn)證的時(shí)候,為null是不執(zhí)行l(wèi)et里面的內(nèi)容
2. let的用法:變量?.let{ ... }
val arrTest: Array<Int?> = arrayOf(1, 2, null, 3, null)
// 一般寫(xiě)法
for (index in arrTest) {
if (index == null) {
continue
}
println("index = $index")
}
// let寫(xiě)法
for (index in arrTest) {
index?.let { println("index = $it") }
}
5赠制、Evils操作符(安全操作符)
1. ?: 這個(gè)操作符表示在判斷一個(gè)可空類(lèi)型時(shí),會(huì)返回一個(gè)我們自己設(shè)定好的默認(rèn)值.
2. !! 這個(gè)操作符表示在判斷一個(gè)可空類(lèi)型時(shí),會(huì)顯示的拋出空引用異常(NullPointException).盡量不要使用,除非保證一定不為空
3. as? 這個(gè)操作符表示為安全的類(lèi)型轉(zhuǎn)換.
4. as操作符钟些,表示類(lèi)型轉(zhuǎn)換烟号,如果不能正常轉(zhuǎn)換的情況下使用as?操作符。當(dāng)使用as操作符的使用不能正常的轉(zhuǎn)換的情況下會(huì)拋出類(lèi)型轉(zhuǎn)換(ClassCastException)異常政恍,而使用as?操作符則會(huì)返回null,但是不會(huì)拋出異常
// ?:
var testStr: String? = null
var length = 0
// 一般寫(xiě)法
length = if (testStr != null) testStr.length else -1
// ?: 寫(xiě)法
length = testStr?.length ?: -1
println(length)
// !!
testStr = null
// println(testStr!!.length)//如果為空,會(huì)報(bào)空指針異常.只有在保證一定不為空的時(shí)候可以使用
// as?
// 會(huì)拋出ClassCastException異常
// val num1 : Int? = "Koltin" as Int
// println("nun1 = $num1")
val num2 : Int? = "Koltin" as? Int
println("nun2 = $num2")
函數(shù)的基本使用
1 汪拥、函數(shù)的聲明
1. 關(guān)鍵字:fun
2. 格式:可見(jiàn)性修飾符 fun 函數(shù)名(參數(shù)名 :類(lèi)型,...) : 返回值{}
3. Kotlin中默認(rèn)為public可見(jiàn)性修飾符
4. () {} 必須存在
fun test(){
}
//相當(dāng)于java中
public void test(){
}
2、成員函數(shù)
成員函數(shù)是指在類(lèi)或?qū)ο笾械膬?nèi)部函數(shù)篙耗。
class Demo {
fun test(){
}
}
3迫筑、函數(shù)的使用
普通的使用
成員函數(shù)的使用
// 普通的使用
test()
// 如果函數(shù)有返回值
val x = basis()
// 成員函數(shù)的使用:先初始化對(duì)象,在根據(jù)對(duì)象使用`中綴符號(hào)(.)`調(diào)用其成員函數(shù)
Demo().test()
// 如果函數(shù)有返回值
val x = Demo().test()
4宗弯、函數(shù)的返回值
1. Unit類(lèi)型(函數(shù)無(wú)返回值,默認(rèn),可以忽略不寫(xiě))
2. 其他顯示返回類(lèi)型的返回值
fun unitFun() : Unit{
println("我是返回值為Unit的函數(shù)脯燃,Unit可省略")
return
// return Unit 可省略
// 或者 return 可省略
}
等價(jià)于
fun unitFun(){
println("我是返回值為Unit的函數(shù),Unit可省略")
}
fun num() : Int{
return 2
}
5蒙保、函數(shù)的參數(shù)
1. 具有參數(shù)的基本函數(shù)聲明
格式:name : type
fun funArgs(numA: Int, numB: Float) {
println("numA = $numA \t numB = $numB")
}
2. 默認(rèn)參數(shù)辕棚,即參數(shù)具有默認(rèn)值
當(dāng)具有默認(rèn)參數(shù)時(shí),可以對(duì)是參數(shù)有默認(rèn)值的參數(shù)不傳遞參數(shù)值追他。
fun defArgs(numA: Int = 1, numB: Float = 2f) {
println("numA = $numA \t numB = $numB ")
}
3. 命名參數(shù)坟募,當(dāng)傳遞參數(shù)的時(shí)候顯示使用 參數(shù)名 = 參數(shù)值
即在使用函數(shù)時(shí)顯示使用參數(shù)名 = 參數(shù)值這種方式傳遞參數(shù)
//命名參數(shù)
fun callFun(str: String, isTrue: Boolean = false, numA: Int = 2) {
println("$str \t $isTrue \t $numA")
}
4. 可變數(shù)量的參數(shù):即參數(shù)的個(gè)數(shù)不定。
1. 當(dāng)一個(gè)函數(shù)中的參數(shù)是不定數(shù)量的個(gè)數(shù)并且是同一個(gè)類(lèi)型邑狸,則可是使用vararg修飾符去修飾這個(gè)變量懈糯,則被vararg修飾的參數(shù)相當(dāng)于一個(gè)固定類(lèi)型的數(shù)組。
2.聲明格式:fun 函數(shù)名(vararg 參數(shù)名 : 類(lèi)型单雾,...) :返回值{}
//可變數(shù)量的參數(shù)
fun varargFun(a:Int,vararg str:String){
str.forEach {
print("$it \t")
}
fun main(args: Array<String>) {
//無(wú)參
test()
//有參
funArgs(100, 1f)
// 默認(rèn)參數(shù)的函數(shù)使用
defArgs()
defArgs(1, 10f)
//命名參數(shù)
//str不具備有默認(rèn)值,所以必須傳值,其他可以不用傳
callFun("aaaaa")
callFun("str",true,2)//----和java一樣了-----
callFun("str",isTrue = true,numA = 3)//使代碼更具有可讀性
callFun("cccc",numA = 10000)//不需要所有的參數(shù)時(shí)
//可變參數(shù)
varargFun(100,"aa","bb","cc")
}
}
6赚哗、單表達(dá)式函數(shù)
即函數(shù)具備返回值的時(shí)候,可以省略花括號(hào)并且在=賦值符號(hào)之后指定代碼體硅堆,而函數(shù)的返回值是有編輯器自動(dòng)推斷的屿储。注意:只有一行代碼體的時(shí)候,可以使用該函數(shù).
fun main(args: Array<String>) {
println(test1())
println(test2(2))
println(test3(2f))
}
// 無(wú)參數(shù)的情況
fun test1() = 2 // 自動(dòng)推斷為:返回類(lèi)型為Int
// 有參數(shù)的情況
fun test2(num: Int) = num * 2 // 自動(dòng)推斷為:返回類(lèi)型為Int
// 或者
fun test3(x: Float, y: Int = 2) = x * y // 和默認(rèn)參數(shù)一起使用,返回值為Float型