Kotlin中空判斷與問(wèn)號(hào)和感嘆號(hào)標(biāo)識(shí)符使用方法
如果有人對(duì)程序的崩潰原因做下統(tǒng)計(jì)的話,那么由于對(duì)象為空,但是又訪問(wèn)了對(duì)象的某個(gè)屬性而導(dǎo)致的崩潰,也許會(huì)是程序崩潰的第一大原因了。
比如我們?cè)谑褂米址臅r(shí)候,變量字符串為空的時(shí)候,我們?nèi)ピL問(wèn)了這個(gè)字符串變量的長(zhǎng)度,結(jié)果就導(dǎo)致了程序的崩潰。
后來(lái)我們有經(jīng)驗(yàn)了,在訪問(wèn)對(duì)象的屬性時(shí),我們都得先做一層對(duì)象是否為空的判斷,這樣我們的程序就變成了這樣:
if (str!=null && str.length()>0 && str.trim().length()>0) {}
這樣看似非常的嚴(yán)謹(jǐn),其實(shí)非常的冗長(zhǎng),很多代碼都是不必要的,而且為了提高程序的穩(wěn)定性,程序到處都是這用判斷。
歸根到還是,所有的編譯器是沒有辦法檢查出運(yùn)行時(shí)對(duì)象是否為空的。
可空變量
雖然由于訪問(wèn)空變量的屬性而導(dǎo)致的程序的崩潰,很大程度上是因?yàn)槌绦騿T的問(wèn)題,但是作為編譯器或者編程規(guī)范,有哪些還可以提升的 地方呢。
Kotlin
在變量的屬性上,把變量分為可空變量和不可空變量。
我們平時(shí)聲明的變量都是不可空變量,對(duì)于不可空變量一開始就需要進(jìn)行賦值,否則會(huì)出現(xiàn)如下的錯(cuò)誤:
變量沒有賦值:
var str:String var len = str.length
錯(cuò)誤提示:
Variable 'str' must be initialized
如果聲明一個(gè)可空的變量,一開始可以先不賦值,當(dāng)一個(gè)空對(duì)象在訪問(wèn)了一些屬性后,會(huì)報(bào)錯(cuò)。
var strn:String? =null println(strn.length)
那就會(huì)報(bào)如下的錯(cuò)誤:
Only safe (?.) or non-null asserted (!!.) calls are allowed on a nullable receiver of type String?
Kotlin
在空判斷為我們做了這個(gè)新特性,但是還是得靠程序員,程序員的科學(xué)使用,才能最好的保證程序的穩(wěn)定性。
!! 運(yùn)算符
Kotlin
幫我們空對(duì)象做了一些處理,對(duì)于一些可控的對(duì)象,Kotlin
在訪問(wèn)某些屬性是,如果對(duì)象是空的,即使訪問(wèn)了某些屬性也不會(huì)直接崩潰,而是返回空對(duì)象。
如果我們不確定對(duì)象有沒有值時(shí),我們可以這樣來(lái)訪問(wèn)屬性:
var strn:String? =null var len = strn?.length
你可以理解這個(gè)?
,是我們對(duì)這個(gè)變量的不確定。
如果你對(duì)這個(gè)變量很有信心,同樣的,你也可以加上兩個(gè)!!,進(jìn)行強(qiáng)調(diào)說(shuō)你非常的確認(rèn)他不是空的。
var strn:String? =null var len = strn?.length strn = "1231" println(strn!!.length)
如果你怎么有信心,你可以使用let
關(guān)鍵字。
var myText:String? = null myText = "hello let" myText?.let { var tv_text: TextView = findViewById(R.id.tv_test) as TextView tv_text.text = myText }
當(dāng)myText
為null
,是不會(huì)進(jìn)入let
里面的函數(shù)的,相當(dāng)于他幫助我們判斷了是否為空的動(dòng)作。寫起來(lái)是不是簡(jiǎn)單多了,在程序中如果不確定的變量就引用let
會(huì)減少很多程序的崩潰問(wèn)題。
小結(jié)
程序中崩潰的原因,大部分是我們?cè)L問(wèn)了一個(gè)空變量,這時(shí)候程序就退出了,這當(dāng)然是程序員的不小心導(dǎo)致的,但是對(duì)于語(yǔ)言,可以幫我們先做檢驗(yàn),或者把編譯器寫的智能點(diǎn),別讓程序員經(jīng)常犯這些錯(cuò)誤。Kotlin
幫我們做了很多,如果再次碰到 ?? 和!!的運(yùn)算符,我們就好理解了。
到此這篇關(guān)于Kotlin中空判斷與問(wèn)號(hào)和感嘆號(hào)標(biāo)識(shí)符使用方法的文章就介紹到這了,更多相關(guān)Kotlin空判斷內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Android編程實(shí)現(xiàn)加載等待ProgressDialog的方法
這篇文章主要介紹了Android編程實(shí)現(xiàn)加載等待ProgressDialog的方法,實(shí)例分析了Android中加載等待類ProgressDialog的具體使用方法,需要的朋友可以參考下2015-12-12android調(diào)用web service(cxf)實(shí)例應(yīng)用詳解
Google為ndroid平臺(tái)開發(fā)Web Service提供了支持,提供了Ksoap2-android相關(guān)架包接下來(lái)介紹android調(diào)用web service(cxf),感興趣的朋友可以了解下2013-01-01Android編程實(shí)現(xiàn)自定義ProgressBar樣式示例(背景色及一級(jí)、二級(jí)進(jìn)度條顏色)
這篇文章主要介紹了Android編程實(shí)現(xiàn)自定義ProgressBar樣式功能,涉及針對(duì)背景色及一級(jí)、二級(jí)進(jìn)度條顏色的操作技巧,需要的朋友可以參考下2017-01-01Android使用Scroller實(shí)現(xiàn)彈性滑動(dòng)效果
這篇文章主要介紹了Android使用Scroller實(shí)現(xiàn)彈性滑動(dòng)效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-12-12Android基于ViewPager實(shí)現(xiàn)類似微信頁(yè)面切換效果
這篇文章主要介紹了Android基于ViewPager實(shí)現(xiàn)類似微信頁(yè)面切換效果,通過(guò)Fragment適配器實(shí)現(xiàn)頁(yè)面切換效果,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-05-05Android開發(fā)實(shí)現(xiàn)的圖片瀏覽功能示例【放大圖片】
這篇文章主要介紹了Android開發(fā)實(shí)現(xiàn)的圖片瀏覽功能,結(jié)合實(shí)例形式分析了Android針對(duì)圖片的切換顯示、透明度、大小調(diào)整等相關(guān)操作技巧,需要的朋友可以參考下2019-04-04Android Studio 3.6 layout文件text模式切換問(wèn)題
這篇文章主要介紹了Android Studio 3.6 layout文件text模式切換問(wèn),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-03-03