1:Elvis操作符 ?:
如果 ?: 左邊表達式非空急膀,elvis操作符就會返回左邊的結(jié)果钝腺,否則返回右邊的結(jié)果。
請注意耘成,僅在左側(cè)為空的時候榔昔,右側(cè)的表達式才會計算。
fun elvisTest(b: String?) { ? ? val a= b?.length ?: -1 // 等價于 val a:Int = if( b!= null) b.length else -1 ? ? Log.d("alen","b is$瘪菌" + ",a is " +a) }
2:類型轉(zhuǎn)換as和安全轉(zhuǎn)換 as?
當(dāng)使用 as 轉(zhuǎn)型的時候撒会,可能會經(jīng)常出現(xiàn) ClassCastException。 所以师妙,現(xiàn)在可以使as?安全轉(zhuǎn)型诵肛,當(dāng)轉(zhuǎn)型不成功的時候,它會返回 null默穴。
fun safeCast(param: Any) {
? ? val m: Int? = if(param is Int) param else null
? ? Log.d("alen","param is ${param}" + ",m is " + m)
? ? val n: Int? = param as? Int
? ? Log.d("alen","param is ${param}" + ",n is " +n)
}
3:kotlin空安全(Null Safety)
每一個開發(fā)人員都會遇到這樣的問題:在使用某個對象時怔檩,必須得考慮這個對象是否為空褪秀。如果對象可能為空,則不得不需要寫 if(object != null) 之類的代碼薛训,如果判斷條件寫反媒吗,或者少寫了一個條件判斷,應(yīng)用就會在運行時出現(xiàn)Crash 了乙埃。于是我們千辛萬苦寫的代碼闸英,到頭來卻被各種 NullPointerException 害苦。而現(xiàn)在 Kotlin Null Safety 能幫助我們節(jié)省時間膊爪,脫離空指針的苦海自阱。
Kotlin 定義變量有兩種方式嚎莉,可以為 Null 和不可以為 Null米酬。在變量類型后面加?表示該變量可以為 Null趋箩。
//定義一個可以為null的變量 var name: String? = null //定義一個不可以為null的變量赃额,如果此時賦值為null,則會報異常 val country: String = "china" //報錯叫确,可能為null的變量不可以直接調(diào)用其方法 //? ? ? ? var length: Int = name.length //如果name為null則pass跳芳,如果name不為null則調(diào)用count()方法 var length: Int? = name?.count() //不管name是否為null都調(diào)用count()方法,如果為null竹勉,則拋出NullPointerException var count: Int = name!!.count() //由于country不為null飞盆,則可以直接調(diào)用其count方法 var countryCount: Int = country.count()
4:冒號:
1、類型和超類型之間的冒號前要有一個空格
2次乓、實例和類型之間的冒號前不要空格
// 定義全局變量時 var str: String? = null // 類的繼承與變量定義 class KotlinTestActivity<T : Serializable>(name: String) : Activity() { }
5:類型判斷符 is
檢查某個實例是否是某個類型吓歇,如果判斷出屬于某個類型,那么判斷后的分支中可以直接可當(dāng)該類型使用票腰,無需顯示轉(zhuǎn)換城看。
fun getStringLength(obj: Any): Int {
? ? if(obj is String && obj.length >0) {
? ? ? return obj.length
? ? }
? ? return -1;
}
6:范圍操作符 .. 以及 in
使用 in 運算符來檢查某個數(shù)字是否在指定區(qū)間內(nèi)
for(i in 1..5) { ? ? Log.d("alen","i is " +i) } // 結(jié)果 // i is 1 // i is 2 // i is 3 // i is 4 // i is 5
downTo()函數(shù)
//區(qū)間內(nèi)循環(huán):downTo()函數(shù) for(i in 4 downTo 1) { //倒序遍歷 Log.d("alen","i is " +i) } // i is 4 // i is 3 // i is 2 // i is 1
step()函數(shù)
可以進行任意數(shù)量的迭代,而不是每次變化都是1
// step()函數(shù) 可以進行任意數(shù)量的迭代杏慰,而不是每次變化都是1 for(i in 0..5 step 2) { Log.d("alen","i is " +i) } // i is 0 // i is 2 // i is 4 // 以步長為2從4到1進行循環(huán) for(i in 4 downTo 1 step 2) { Log.d("alen","i is " +i) } // i is 4 // i is 2
多行輸入符 三個雙引號
三引號的形式用來輸入多行文本测柠,也就是說在三引號之間輸入的內(nèi)容將被原樣保留,之中的單號和雙引號不用轉(zhuǎn)義缘滥,其中的不可見字符比如/n和/t都會被保留.
valstr = """ one two """ //等價于 val str = "one\ntwo" val str = "one"+"\n"+"two"
如果學(xué)習(xí)過程中有新的操作符會進行補充轰胁。