kotlin基礎語法 原

##摘要 如果你真的希望深入的瞭解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")
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章