欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Kotlin中空判斷與問(wèn)號(hào)和感嘆號(hào)標(biāo)識(shí)符使用方法

 更新時(shí)間:2022年12月06日 14:24:05   作者:go2coding  
最近使用kotlin重構(gòu)項(xiàng)目,遇到了一個(gè)小問(wèn)題,在Java中,可能會(huì)遇到判斷某個(gè)對(duì)象是否為空,為空?qǐng)?zhí)行一段邏輯,不為空?qǐng)?zhí)行另外一段邏輯,下面這篇文章主要給大家介紹了關(guān)于Kotlin中空判斷與問(wèn)號(hào)和感嘆號(hào)標(biāo)識(shí)符處理操作的相關(guān)資料,需要的朋友可以參考下

如果有人對(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)文章

最新評(píng)論