##摘要 如果你真的希望深入的瞭解kotlin語言,可以查看英文版Kotlin語言文檔,或者我的kotlin語言文檔中文翻譯項目KotlinDoc-cn:https://github.com/kymjs/KotlinDoc-cn 本文原創,轉載請註明地址:http://blog.kymjs.com/
##正文 在閱讀以下內容前,你可能需要先了解一些Kotlin語言的特性:在語句的行尾可以不用加分號(加上也不會錯),聲明一個方法需要加上fun關鍵字,如果函數是重載父類的方法,還必須要加上override關鍵字,方法的參數是先寫形參名後跟冒號再寫形參類型;kotlin源文件不需要相匹配的目錄和包,源文件可以放在任何文件目錄。但是我們在寫Android的Activity等類時,清單文件中的聲明,必須與實際包路徑相匹配。
####定義函數方法
例1:方法包含兩個Int參數並返回Int類型值
fun sum(a: Int, b: Int): Int {
return a + b
}
例2:方法體只有一條語句,並且自動推測返回類型
fun sum(a: Int, b: Int) = a + b
例3:如果方法是一個public的,則必須明確寫出返回類型
public fun sum(a: Int, b: Int): Int = a + b
例4:返回一個沒有意義的值(類似Java中的void)
fun printSum(a: Int, b: Int): Unit {
print(a + b)
}
// 如果是返回Unit類型,則可以省略(對於public方法也是這樣):
public fun printSum(a: Int, b: Int) {
print(a + b)
}
####使用nullable值以及空值檢測 引用或函數返回值如果可能爲null值,則必須顯式標記nullable。 (在類型後面跟一個問號表示這個對象可能爲空,跟兩個感嘆號表示這個類型一定不爲空)
fun main(args: Array<String>) {
if (args.size() < 2) {
print("Two integers expected")
return
}
val x = parseInt(args[0])
val y = parseInt(args[1])
//必須做判斷,因爲x或y有可能爲空
if (x != null && y != null) {
// x 和 y 在已經檢測不爲null時,系統會自動將其轉換爲非空類型
check print(x * y)
}
}
/**
* 如果str不能轉爲Int類型,則返回null
*/
fun parseInt(str: String): Int? {
// (代碼略)
}
####in關鍵字的使用 如果一個數字是在某一個區間內,可以使用in關鍵字
//打印y次OK
if (x in 1..y-1)
print("OK")
//如果x不存在於array中,則輸出Out
if (x !in 0..array.lastIndex)
print("Out")
//打印1到5
for (x in 1..5)
print(x)
//遍歷集合(類似於Java中的for(String name : names))
for (name in names)
println(name)
//如果names集合中包含text對象則打印yes
if (text in names)
####類型檢測並自動轉換
is關鍵字的用法(類似於Java中的instanceof關鍵字)
例1
fun getStringLength(obj: Any): Int? {
if (obj is String) {
// 做過類型判斷以後,obj會被系統自動轉換爲String類型
return obj.length
}
//在這裏還有一種方法,與Java中instanceof不同,使用!is
// if (obj !is String){
// // XXX
// }
// 這裏的obj仍然是Any類型的引用
return null
}
例2
fun getStringLength(obj: Any): Int? {
// 在左側obj已經被判斷爲String類型,所以在&&的右側可以直接將obj當成String類型來使用
if (obj is String && obj.length > 0) {
return obj.length
}
return null
}
####when表達式 (類似於Java中的switch)
fun cases(obj: Any) {
when (obj) {
1 -> print("第一項")
"hello" -> print("這個是字符串hello")
is Long -> print("這是一個Long類型數據")
!is String -> print("這不是String類型的數據")
else -> print("else類似於Java中的default")
}
}