? ? ? ? ?2017年8月7號Android 之神 Jake Wharton 加入Google纽乱,J 神的推文提到叉庐,他加入了 Google Android Framework Team究珊,并且專注在 Kotlin 領(lǐng)域,今年 IO 期間 Google 宣布了 Kotlin 作為 Android 開發(fā)的官方語言。未來 Kotlin 在 Android 開發(fā)者中的份量會(huì)越來越大,這一消息對于好好學(xué)習(xí)Kotlin就更有動(dòng)力了窖杀。
? ? ? ? ? 從kotlin被大家所熟知到現(xiàn)在裙士,我就一直在想要自學(xué)一下入客,但是由于各種原因(趕項(xiàng)目等等)都沒去付諸實(shí)踐。感覺也是蠻幸運(yùn)的腿椎,進(jìn)入的這家新公司剛好有個(gè)帶我的安卓大神桌硫,主要用kotlin開發(fā)項(xiàng)目。以下所寫皆是基礎(chǔ)知識酥诽,熟知的大神們可自動(dòng)忽略O(shè)(∩_∩)O ? ? 首先介紹一個(gè)kotlin自學(xué)的網(wǎng)站鞍泉,有興趣的可以點(diǎn)進(jìn)去學(xué)習(xí)點(diǎn)擊打開鏈接
1.要想用kotlin開發(fā)安卓首先要安裝插件
2.配置項(xiàng)目根.gradle文件
3.配置Module的.gradle文件
4.如果運(yùn)行時(shí)遇到這樣的錯(cuò)誤
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.lxlproject.kotlin/com.lxlproject.kotlin.MainActivity}: java.lang.ClassNotFoundException: Didn't find class "com.lxlproject.kotlin.MainActivity" on path: DexPathList[[zip file "/data/app/com.lxlproject.kotlin-2/base.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_dependencies_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_0_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_1_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_2_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_3_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_4_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_5_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_6_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_7_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_8_apk.apk", zip file "/data/app/com.lxlproject.kotlin-2/split_lib_slice_9_apk.apk"],nativeLibraryDirectories=[/data/app/com.lxlproject.kotlin-2/lib/x86, /system/lib, /vendor/lib]]
以上報(bào)錯(cuò)主要是Module的.gradle文件配置出錯(cuò)的原因皱埠,根據(jù)步驟3修改一下即可
5.把MainActivity轉(zhuǎn)換成Kotlin代碼
Kotlin plugin包含了一個(gè)有趣的特性肮帐,它能把Java代碼轉(zhuǎn)成Kotlin代碼。正如任何自動(dòng)化那樣边器,結(jié)果不會(huì)很完美训枢,但是在你第一天能夠使用Kotlin語言開始編寫代碼之前,它還是提供了很多的幫助忘巧。所以我們在MainActivity.java類中使用它恒界。打開文件,然后選擇Code->Convert Java File to Kotlin File砚嘴。對比它們的不同之處十酣,可以讓你更熟悉這門語言涩拙。
6.基礎(chǔ)知識點(diǎn)大集結(jié)
(1)變量:變量可以很簡單地定義成可變(var)和不可變(val)的變量
(2)可null類型:指定一個(gè)變量是可null是通過在類型的最后增加一個(gè)問號?耸采。因?yàn)樵贙otlin中一切都是對象(甚至是Java中原始數(shù)據(jù)類 ? ? ? ? ? 型)兴泥,一切都是可null的。所以虾宇,
當(dāng)然我們可以有一個(gè)可null的integer:
一個(gè)可nul類型搓彻,你在沒有進(jìn)行檢查之前你是不能直接使用它。這個(gè)代碼不能被編譯:
前一行代碼標(biāo)記為可null嘱朽,然后編譯器就會(huì)知道它旭贬,所以在你null檢查之前你不能去使用它。還有一個(gè)特性是當(dāng)我們檢查了一個(gè)對 ? ? ?象的可null性搪泳,之后這個(gè)對象就會(huì)自動(dòng)轉(zhuǎn)
型成不可null類型稀轨,這就是Kotlin編譯器的智能轉(zhuǎn)換:
當(dāng)然kotlin是可以做到更簡潔有力的,如下可以簡化上面代碼為:
這里我們使用了安全訪問操作符(?)岸军。只有這個(gè)變量不是null的時(shí)候才會(huì)去執(zhí)行前面的那行代碼靶端。否則,它不會(huì)做任何事情凛膏。并且我們甚至可以使用__Elvis operator__(?:):
因?yàn)樵贙otlin中throw和return都是表達(dá)式杨名,他們可以用在__Elvis operator__操作符的右邊:
然后,我們可能會(huì)遇到這種情景猖毫,我們確定我們是在用一個(gè)非null變量台谍,但是他的類型卻是可null的。我們可以使用!!操作符來強(qiáng)制編譯器執(zhí)行可null類型時(shí)跳過限制檢查:
上面的代碼將會(huì)被編譯吁断,但是很顯然會(huì)奔潰趁蕊。所以我們要確保只能在特定的情況下使用。通常我們可以自己選擇作為解決方案仔役。如果一份代碼滿篇都是!!掷伙,那就有股代碼沒有被正確處理的氣味了。
(3)If表達(dá)式:
在Kotlin中一切都是表達(dá)式又兵,也就是說一切都返回一個(gè)值任柜,if表達(dá)式總是返回一個(gè)value。如果一個(gè)分支返回了Unit沛厨,那整個(gè)表達(dá)式也將返回Unit宙地,它是可以被忽略的,這種
情況下它的用法也就跟一般Java中的if條件一樣了逆皮。
(4)when表達(dá)式:
或者你甚至可以從對參數(shù)做需要的幾乎瘋狂的檢查擺脫出來宅粥。它可以使用簡單的if/else鏈替代:
(5)for循環(huán):
(6)while/do…while表達(dá)式:
******踩過的坑:
(1)int類型變量轉(zhuǎn)String
用習(xí)慣了java總會(huì)不自覺直接在int類型變量之后加 + “” 即可,例如:
kotlin是不支持醬紫的电谣,而是要在int變量直接就加 "" +
(2)獲取 [1,2,3,…] 數(shù)組
(3)構(gòu)造方法
(4)tollrbar設(shè)置單個(gè)右邊菜單按鈕
(5)tollrbar設(shè)置多個(gè)右邊菜單按鈕
(6)界面跳轉(zhuǎn)傳參方法
7.Android Studio3.0版本之后支持kotlin ?只需要在新建項(xiàng)目的時(shí)候勾選支持kotlin即可
簡單的demo下載:傳送門