Kotlin語法-上篇

1.沒有「;」java

你會發現不用再去寫';'了,我還傻傻的去敲,會報錯。安全

2.重要的「:」 功能大大提高ide

功能1:函數

定義變量類型:this

var name:String="my name" //變量name爲String類型spa

功能2:指針

定義參數的類型:對象

fun makeTool(id:Int){ //參數id爲Int類型繼承

}接口

功能3:

定義函數的返回值:

fun getAddr(id:Int):String{ //返回值爲String類型

}

功能4:

聲明類/接口的繼承

class KotlinActivityUI :AnkoComponent<KotlinActivity>{//繼承AnkoComponent接口

功能5:

使用Java類

val intent = Intent(this, MainActivity::class.java) //須要用::來使用Java類,注意是兩個

3.沒有new 啦

三、沒有new啦

Kotlin實例化一個對象時不須要new關鍵字

var list=ArrayList()

4.變量、常量、類型推斷

變量var,常量val,能夠自動判斷的

5.初始化和延遲加載

Kotlin裏必須爲變量賦值,

若是隻寫一個變量,卻不賦值,像下面這樣:var name

編譯器會報錯,提示你未初始化,你必須賦值爲0或者null,或者別的什麼值。

不過,咱們有時候就是不能在定義變量時就初始化它,

好比在Android中咱們常常預約義一個View控件而不初始化,

可是直到onCreate或onCreateView時才初始化它。

針對這種狀況,Kotlin提供了懶加載lazy機制來解決這個問題,

在懶加載機制裏,變量只有在第一次被調用時,纔會初始化,代碼須要這樣寫

private val mt:TextView by lazy{  //這時候不初始化
findViewById(R.id.kt) as TextView
}
override fun onCreate(saveInstanceState:Bundle?){
super().onCreat(saveInstanceState)
setContentView(R.layout.activity_main)
mt.text="abc"  //這裏纔是
}
可是lazy只適用於val對象,對於var對象,須要使用lateinit,原理是相似的,只是代碼須要這樣寫
lateinit var sname:String
fun initSs(name:String)
sname=name

6.空指針安全

在Kotlin裏,能夠用「?」表示能夠爲空,也能夠用「!!」表示不能夠爲空。

空指針安全並非不須要處理空指針,你須要用「?」聲明某個變量是容許空指針的,例如:

var num:Int?=null

聲明容許爲空時,不能使用類型推斷,必須聲明其數據類型

空指針雖然安全了,但對空指針的處理仍是要視狀況而定,有時候不處理,有時候作數據檢查,有時候還須要拋出異常,這三種狀況能夠這樣寫:

val v1 =num?.toInt() //不作處理返回 null

val v2 =num?.toInt() ?:0 //判斷爲空時返回0

val v3 =num!!.toInt() //拋出空指針異常(用「!!」表示不能爲空

7.定義函數

在Kotlin語法裏,定義函數的格式是這樣的

fun 方法名(參數名:類型,參數名:類型...) :返回類型{

}

因此,通常來講,函數是這樣寫的

fun getAddress(id:Int,name:String):String{

    return"got it"

}

因爲Kotlin能夠對函數的返回值進行類型推斷,因此常常用「=」代替返回類型和「return」關鍵字,上面這段代碼也能夠寫成

fun getAddress(id:Int,name:String)={ //用「=」代替return,返回String類型則交給類型推斷

     "got it" //return被「=」代替了

}

若是函數內代碼只有一行,咱們甚至能夠去掉{}

fun getAddress(id:Int,name:String)="got it" //去掉了{}

}

函數也容許空指針安全,在返回類型後面增長「?」便可

fun getAddress(id:Int,name:String) :String?="got it"

有時候,函數的返回類型是個Unit,這其實就是Java中的void,表示沒有返回

fun addAddress(id:Int,name:String):Unit{ //至關於java的void

}

不過,在函數無返回時,通常不寫Unit

fun addAddress(id:Int,name:String){ //至關於java的void

}

8.用is取代了instance of

代碼很簡單

if(obj is String)...

9.in、區間和集合

Kotlin裏有區間的概念,例如1..5表示的就是1-5的整數區間

能夠用in判斷數字是否在某個區間

if(x in 1..5){ ...//檢查x數值是否在1到5區間

能夠用in判斷集合中是否存在某個元素

if(name in list){...//檢查list中是否有某個元素(比Java簡潔多了)

能夠用in遍歷整個集合

for(i in 1..5){ ...//遍歷1到5

for(item in list){...//遍歷list中的每一個元素(至關於Java的for(String item : list))

另外,in在遍歷集合時功能至關強大:

在遍歷集合時,能夠從第N項開始遍歷

for(i in 3..list.size-2){...至關於for (int i = 3; i <= list.size()-2; i++)

能夠倒序遍歷

for(i in list.size downTo 0) {...至關於for (int i = list.size(); i >= 0; i--)

能夠反轉列表

for(i in (1..5).reversed())

能夠指定步長

for(i in 1.0..2.0 step 0.3) //步長0.3

Kotlin裏的集合還都自帶foreach函數

list.forEach {...

相關文章
相關標籤/搜索