kotlin複合運算符

?. 安全調用運算符

foo?bar

if (foo != null){
    return foo.bar()
}else{

    return null
}

fun lengthOfStr(s:String?):Int = s.length //不能直接調用length方法
//如果增加了null檢查以後,就可以直接調用s.length了,如下:
fun lengthOfStr(s:String?):Int = if(s!=null) s.length else 0
//但是如果每個可空類型都這樣檢查會顯得特別累贅,此時就用到了安全調用運算符?.

s?.length 就相當於 if(s!=null) s.length else null
//如果s不爲空就執行方法,如果爲空就返回null

?: Elvis運算符(null合併運算符)

//簡單來說就是:
a?:b就是
if(a == null ){
	return a
} esle{
    return b
}
fun foo(s:String?){
     val t:String  =  s ?:  "" //如果?:左邊的值不爲空返回左邊的值,如果爲空返回""
}

//可以這樣使用
 name ?: "UnKnown" //如果?:左邊爲空則返回"UnKnown"
//和throw運算符同時使用
//如果不爲空就返回name,如果爲空就拋出一個有意義的錯誤,而不是NullPointException
val name = name ?: throw illegalargumentexception("UnKnown name")//如果name爲空就會報自定義的異常

as? 安全轉換運算符

foo as? Type -> foo is  Type  retrun (foo as Type)
             -> foo !is Type  return null


非空判斷 !!. 跟 ?. 的區別跟用法

?.意思是這個參數可以爲空,並且程序繼續運行下去
!!.的意思是這個參數如果爲空,就拋出異常

?.
//kotlin:
a?.run()
 
//java代碼:
if(a!=null){
 a.run();
}
-------------------------------------------
!!.
//kotlin:
a!!.run()
 
//java代碼: 
if(a!=null){
 a.run();
}else{
 throw new NullPointException();
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章