工欲善其事必先利其器,首先要先配置開發(fā)環(huán)境和選好開發(fā)工具埃难,我在這里使用的是Android Studio2.3.3和 IntelliJ IDEA:https://www.jetbrains.com/idea/,附上我的IntelliJ IDEA版本
Android Studio:2.x 版本需要安裝 Kotlin 插件支持涤久,3.0 開始默認(rèn)支持編寫 Kotlin 代碼涡尘,無需插件(PS:添加插件的方式跟加GsonFormat一樣的,就不再詳解了)响迂。
下面來看看語(yǔ)法:
1考抄、變量類型:可空
kotlin的特性之一是類型安全。定義變量時(shí)需要定義該變量是否為空蔗彤,一旦要求變量不能為空川梅,那后續(xù)的空指針問題自然也不復(fù)存在。我們先來看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í)直接賦值待侵,則可以不用指定變量類型丢早,否則需要在變量名后使用“:”來指定類型。在類型后加“秧倾?”表示該變量可空怨酝。如果變量可空,那在后續(xù)使用變量時(shí)那先,就必須先判斷是否為空农猬。
另外從代碼中可以看出很重要的一點(diǎn),那就是:從此再也不用寫分號(hào)
var a:Int =null//錯(cuò)誤售淡,類型后沒斤葱?,即不可空類型揖闸,自然不能等于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修飾符
可見祟牲,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ù)類型,并且可見夫啊,在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ǔ)法詳見教程 ? http://www.kotlincn.net/docs/tutorials/
另外报嵌,附上Kotlin資源大全 ? ?http://blog.csdn.net/cenzr/article/details/72674849