工欲善其事必先利其器,首先要先配置開(kāi)發(fā)環(huán)境和選好開(kāi)發(fā)工具,我在這里使用的是Android Studio2.3.3和 IntelliJ IDEA:https://www.jetbrains.com/idea/,附上我的IntelliJ IDEA版本
Android Studio:2.x 版本需要安裝 Kotlin 插件支持,3.0 開(kāi)始默認(rèn)支持編寫 Kotlin 代碼,無(wú)需插件(PS:添加插件的方式跟加GsonFormat一樣的,就不再詳解了)。
下面來(lái)看看語(yǔ)法:
1、變量類型:可空
kotlin的特性之一是類型安全。定義變量時(shí)需要定義該變量是否為空,一旦要求變量不能為空,那后續(xù)的空指針問(wèn)題自然也不復(fù)存在。我們先來(lái)看kotiln里是如何定義變量的:
java:
String str ="test";
final String str2 ="test2";
String str3;
kotlin:
var str ="test"
val str2 ="test2"
var str3:String?=null
kotlin使用var關(guān)鍵字定義常量,用val關(guān)鍵字定義變量,如果在定義變量時(shí)直接賦值,則可以不用指定變量類型,否則需要在變量名后使用“:”來(lái)指定類型。在類型后加“?”表示該變量可空。如果變量可空,那在后續(xù)使用變量時(shí),就必須先判斷是否為空。
另外從代碼中可以看出很重要的一點(diǎn),那就是:從此再也不用寫分號(hào)
var a:Int =null//錯(cuò)誤,類型后沒(méi)?,即不可空類型,自然不能等于null
var a:Int? =null//正確
val canNull: Int ? =0
canNull.toFloat//錯(cuò)誤,可空變量調(diào)用時(shí)要判斷空
canNull?.toFloat//正確,(如果是null,什么都不做)
canNull!!.Float//正確,(如果null,報(bào)空指針)
val canNotNull: Int? =0
canNotNull.toFloat//正確
如果在定義變量時(shí)(例如定義成員變量),又想該變量不為空,又不想定義時(shí)就初始化時(shí)可以使用lateinit關(guān)鍵字
lateinit var test: String//正確
lateinit val test:String//錯(cuò)誤
lateinit var test: Float//錯(cuò)誤
關(guān)于lateinit關(guān)鍵字的使用限制:
lateinit modifier is allowed only on mutable properties
翻譯:lateinit修飾符只允許在可變屬性上
lateinit modifier is not allowed on primitive type properties
翻譯:在原始類型屬性上不允許使用lateinit修飾符
可見(jiàn),lateinit修飾符只能修飾不可空類型,并且不允許修飾基礎(chǔ)類型(四類八種基礎(chǔ)類型int, double,boolean)。
2、常用語(yǔ)法:
switch:
java:
int test =1;
switch(test) {
? ? ? ? case1:...break;
? ? ? ? default:break;
}
kotlin:
when (test) {
? ? ? ? ? ?1-> fragment = ShopFragment()
? ? ? ? ? ?else-> {
? ? ? ? ? ?}
}
這只是when最簡(jiǎn)單的用法,但kotlin里when的用處要比switch強(qiáng)大得多,when可以返回值,甚至可以在匹配條件里檢測(cè)參數(shù)類型等,例如:
val result = when (x) { //返回值
? ? ? 0,1->"test"else->"else"}
when(view) { //檢測(cè)參數(shù)類型,并且可見(jiàn),在kotlin里,instanceof使用is代替
? ? ? ? ? ?is TextView -> view.setText("I'm a TextView")
? ? ? ? ? else-> view.visibility = View.GONE
}
var test =3
when(view) { //檢測(cè)參數(shù)范圍
? ? ? ? ? ?in0..10-> {
? ? ? ? ? ?...
? ? ? ? ? ?}
? ? ? ? ? ?else-> {
? ? ? ? ? ?...
? ? ? ? ? }
for循環(huán):
java:
for(int i =0; i <5; i++) {
}
kotlin:
for(i in 0..4) {
}
for(item in listData) {//遍歷列表,直接操作列表內(nèi)的對(duì)象
? ? ?item.method()
}
for(i in listData.indices) {//遍歷列表帶行index
}
for((i,item)in list.witnIndex()) {//加強(qiáng)版
}
listData.forEach { it.method() }//變種的for循環(huán)
更多語(yǔ)法詳見(jiàn)教程 ? http://www.kotlincn.net/docs/tutorials/
另外,附上Kotlin資源大全 ? ?http://blog.csdn.net/cenzr/article/details/72674849