国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

這篇具有很好參考價(jià)值的文章主要介紹了Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

一、介紹

????????如今在Android開發(fā)中,應(yīng)用層開發(fā)語(yǔ)言主要是Java和Kotlin,Kotlin是后來(lái)加入的,主導(dǎo)的語(yǔ)言還是Java。kotlin的加入仿佛讓會(huì)kotlin語(yǔ)言的開發(fā)者更屌一些,其實(shí)不然。

????????有人說(shuō)kotlin的引入是解決開發(fā)者復(fù)雜的邏輯,并且對(duì)空指針控制的比較友好,但是我們?cè)陂_發(fā)過(guò)程中會(huì)發(fā)現(xiàn),好像并不是這么回事,甚至有些開發(fā)者發(fā)現(xiàn),在使用過(guò)程中會(huì)出現(xiàn)莫名其妙的錯(cuò)誤,而且還不好定位。

????????這時(shí)候,我們應(yīng)該去分析,kotlin適不適合自己,自己能不能駕馭?

二、分析Java與kotlin實(shí)戰(zhàn)中的利與弊

????????學(xué)過(guò)政治都知道,任何東西都是一把雙刃劍,既有好的一面也有不好的一面。不能什么都照搬過(guò)來(lái)。kotlin的好是建立在你已很好的掌握,但是不好的是你如果只會(huì)基礎(chǔ),在使用過(guò)程中,無(wú)法避免一些異常情況。但是Java的友好是適合新手使用,普及度高。

kotlin的弊端與分析

1、參數(shù)為null

參數(shù)為null這種很容易引起空指針,為什么會(huì)出現(xiàn)這種情況?是受Java的寫法有關(guān)系

Java:

public void log(String txt)

Kotlin:

public fun log(txt:String)

正常Java你是可以傳null進(jìn)去,但是在kotlin,你傳null就會(huì)報(bào)錯(cuò)

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

?分析:

Java中,你參數(shù)可以傳任何,你傳null也是沒(méi)問(wèn)題,但是你在kotlin中,就沒(méi)有這么隨意了,這是為什么呢?

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

?在kotlin中,任何參數(shù)都會(huì)被修飾,為空或者不為空,默認(rèn)是NotNull。如果你不能傳遞null值過(guò)去。

如何避免?

只要我們是通過(guò)kotlin語(yǔ)法,你在任何參數(shù)申明都需要設(shè)置成為可為null

public fun log(txt:String?)

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

這個(gè)時(shí)候,在參數(shù)中,已變成可為null。

2、lateinit 報(bào)錯(cuò)未初始化先使用

????????lateinit 是稍后初始化,這個(gè)只能做全局,不能出現(xiàn)在方法體,但是也有個(gè)問(wèn)題。如果你用lateinit 修飾一個(gè)變量,那么這個(gè)變量可以不先申明變量值,等使用時(shí)再初始化。

但是這個(gè)也會(huì)出現(xiàn)一個(gè)問(wèn)題,如果你沒(méi)初始化就使用會(huì)報(bào)錯(cuò)

    lateinit var txt: String


    public fun log() {
        println(txt)
    }

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

????????有人會(huì)說(shuō),我不能判空嘛?判空也不行。只要你使用之前就必須初始化,否則就會(huì)報(bào)錯(cuò)。這個(gè)問(wèn)題在新手特別容易犯錯(cuò)。

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

????????所以為什么這個(gè)關(guān)鍵字往往出現(xiàn)在修飾View的初始化使用比較多。這個(gè)在使用的時(shí)候進(jìn)行判空,所以該字段默認(rèn)為null,但是你使用必須要有值,只要你調(diào)用get方法就會(huì)觸發(fā)。

思考:

有人會(huì)問(wèn),如果我直接修改變量的get方法,如果為null,那么get直接給他初始化。

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

?lateinit不允許修改set和get。

????????但是Java就不會(huì),Java是所見(jiàn)即所得,你的東西就是你的東西,kotlin是通過(guò)自己的語(yǔ)言限制,翻譯成Java語(yǔ)言。所以,你不了解或者說(shuō)不清楚目標(biāo)類,很容易造成風(fēng)險(xiǎn),并且這種bug被帶到線上概率很大

3、參數(shù)類型強(qiáng)轉(zhuǎn)"!!"導(dǎo)致null空指針

這種錯(cuò)誤在方法調(diào)用很容易出現(xiàn),而且這種BUG的概率非常高,導(dǎo)致項(xiàng)目質(zhì)量很差。

public fun log(txt:String)

分析:

我們申請(qǐng)一個(gè)方法,參數(shù)不為null,在Java過(guò)程中,這種你不需要管,直接調(diào)用,一般對(duì)null的判斷會(huì)在方法體中進(jìn)行

Java:

public void log(String txt){

if(txt!=null){}

}

但是你在kotlin中,只能在調(diào)用處進(jìn)行判斷,否則就要將參數(shù)通過(guò)強(qiáng)制表示不為null,"!!"

我們?cè)陧?xiàng)目中進(jìn)程遇到log(msg!!)這種錯(cuò)誤的寫法,這種寫法,如果你的實(shí)參申請(qǐng)可以為null,但是形參不能為null,這個(gè)時(shí)候你只能通過(guò)"!!"來(lái)強(qiáng)轉(zhuǎn),但是:你的實(shí)參如果為null,這個(gè)時(shí)候就會(huì)報(bào)空指針,這是為什么?

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

這是因?yàn)槟愕膶?shí)參在調(diào)用時(shí)已進(jìn)行強(qiáng)制轉(zhuǎn)換,也會(huì)提前進(jìn)行空指針異常檢查,所以在使用?"!!"強(qiáng)轉(zhuǎn)符號(hào)時(shí),一定要判空,否則會(huì)報(bào)錯(cuò),但是Java中,我們隨便傳null。

4.形參為Val修飾的常量,無(wú)法修改

在kotlin中,形參是傳值類型,你是無(wú)法直接修改變量,必須通過(guò)其他變量接收完再修改

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

?默認(rèn)是Val類型
    public fun addOne(item:Int):Int{
     val  relVal=item+1
        return relVal
    }

5.默認(rèn)為null的變量引用

默認(rèn)值為null,如果變量已申請(qǐng)為這種,那么你以后的使用將離不開"?"和"!!"轉(zhuǎn)換。

var temp:String?=null

這種區(qū)分全局和局部

1、全局:

如果是全局,對(duì)于IDE來(lái)說(shuō),任何時(shí)刻都有可能是null,所以在方法中使用,默認(rèn)當(dāng)成null來(lái)處理

Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇

?所以,你即使判空,還是不行。需要一輩子跟著"?"和"!!"搭配使用。

2、局部:

如果是局部,只要你在使用之前判斷過(guò)一次,在合理的校驗(yàn)范圍內(nèi)都是有效

    public fun log(mm:String) {
        var txt:String?=null
        if (txt==null)
            return
        txt.length


    }

就是這種有起義的原因,導(dǎo)致在實(shí)戰(zhàn)中,很多人很難理解

三、總結(jié)

????????通過(guò)kotlin的自身問(wèn)題,其實(shí)kotlin就是一種插件語(yǔ)言,最終還是翻譯成Java,只是目前來(lái)看,通過(guò)翻譯的目標(biāo)類,還是Java本身,但是增加了特別多的校驗(yàn),導(dǎo)致寫法和Java有很大的不同。這種不同來(lái)自我們的習(xí)慣問(wèn)題。有人提前判空,有人喜歡丟在使用出判空,調(diào)用處讓語(yǔ)法自然一些。

????????Android應(yīng)用不像PC,空指針是致命的BUG,出現(xiàn)一個(gè)就會(huì)導(dǎo)致崩潰。所以,kotlin對(duì)空指針校驗(yàn)特別嚴(yán)格,也對(duì)使用埋下了隱患,新手可以繞開校驗(yàn),但是對(duì)于繞開的原理不夠理解,就會(huì)引起崩潰。

????????kotlin也不是一無(wú)是處,他更像是一個(gè)插件,插件的好處是自然的,可擴(kuò)展等也是kotlin的自身優(yōu)勢(shì)。

????????所以,通過(guò)上面的分析,大家可以自行去選擇項(xiàng)目中的語(yǔ)言,是kotlin還是Java,如果你向往kotlin的寫法,那么就得去了解kotlin的原理,以及要改變自己在Java中的開發(fā)習(xí)慣。kotlin是先判斷后使用,而Java寫法很隨意,由開發(fā)者自行定義,kotlin都是翻譯好的。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-508091.html

最后,用好可以事半功倍,用不好,會(huì)引起各種不好排查的BUG。最后送一句話:水能載舟亦能覆舟。

到了這里,關(guān)于Android 安卓開發(fā)語(yǔ)言kotlin與Java該如何選擇的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來(lái)自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場(chǎng)。本站僅提供信息存儲(chǔ)空間服務(wù),不擁有所有權(quán),不承擔(dān)相關(guān)法律責(zé)任。如若轉(zhuǎn)載,請(qǐng)注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實(shí)不符,請(qǐng)點(diǎn)擊違法舉報(bào)進(jìn)行投訴反饋,一經(jīng)查實(shí),立即刪除!

領(lǐng)支付寶紅包贊助服務(wù)器費(fèi)用

相關(guān)文章

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

支付寶掃一掃領(lǐng)取紅包,優(yōu)惠每天領(lǐng)

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包