Kotlin學習1

1聲明變量和內置數據類型

fun main(){
  var str:String  = "Hello world"
  //var a:Int = 5
  println(str)
}

2只讀變量

要聲明可修改變量,使用var關鍵字
要聲明只讀變量,使用val關鍵字

fun main(){
  val name:String = "jack"
  var age:Int = 10;
  age+=1;
  println(name)
}

val 也不是絕對不能修改的(後面)

3類型推斷

對於已經聲明並賦值的變量,他允許你省略類型定義

fun main(){
  var str = "Hello world"
  println(str)
}

4編譯時常量

只讀變量並非絕對只讀;
編譯時常量只能在函數外定義(包括main函數),因爲編譯時常量必須在編譯時賦值,而函數都是在運行時才調用,函數內的變量也是在運行時賦值,編譯時常量要在這些變量賦值之前就已存在;
編譯時常量只能是常見的基本數據類型:String、Int、Double、Float、Long、Short、Byte、Char、Boolean

const val MAX = 200
fun main(){
  val a = 5;
  println(a)
}

5查看kotlin字節碼

兩種方式
1shift鍵兩次 輸入 show kotlin
2Tools->Kotlin->Show Kotlin Bytecode

6Kotlin引用類型與基本數據類型

java 有兩種數據類型:引用類型和基本數據類型
Kotlin只提供引用類型這一種數據類型,出於更高性能的需要,Kotlin編譯器會在java字節碼中改用基本數據類型。

7表達式(range)

if/else if 表達式

range表達式
in A...B,in關鍵字用來檢查某個值是否在指定範圍之內

when表達式
允許你編寫條件式,在某個條件滿足時,執行對應的代碼
只要代碼包含else if分支,都建議改用when表達式

fun main(){
  val age = 4  
  if(age in 0..3){
    println("嬰幼兒")
  }else if(age in 4..12)
    println("少兒")
  }else{
    println("未知")
  }

  if(age !in 1..3){
    println("..!in.")
  }

8表達式(when)

fun main(){
  val school= "小學"
  val level:Any = when(school){
    "學前班" -> "幼兒"
    "小學" -> "少兒"
    "中學" -> "青少年"
    else -> {
      println("未知")
    }
  }
  println(level)
}

9String模板

模板支持在字符串的引號內放入變量值
還支持字符串裏計算表達式的值並插入結果,添加在${}中的任何表達式,都會作爲字符串的一部分求值。

fun main(){
  val origin="jack"
  val dest = "rose"
  println("$origin love $dest")

  val flag = false
  println("Answer is: ${if(flag)"我可以" else "對不起"}")
}

10函數頭

fun main(){
  println(doSomething(5,false))
}
private fun doSomething(age:Int,flag:Boolean):String{
  return "result"
}

11函數參數,默認值參

不打算傳入參數,可以與先給參數指定默認值

fun fix(name:String,age:Int = 2){
  println(name+age)
}
fun main(){
  fix("jack")
}

12具名函數參數

如果使用命名值參,就可以不用管值參的順序

fun fix(name:String,age:Int = 2){
  println(name+age)
}
fun main(){
  fix(age=4,name="jack")
}

13Unit函數

不是所有函數都有返回值,Kotlin中沒有返回值的函數叫Unit函數,也就是說他們的返回類型是Unit。在Kotlin之前,函數不返回任何東西用void描述,意思是“沒有返回類型,不會帶來什麼,忽略他”,也就是說如果函數不返回任何東西,就忽略類型。但是,void這種解決方案無法解釋現代語言的一個重要特性:泛型。

fun fix(name:String,age:Int = 2){
  println(name+age)
}
fun main(){
  println( fix(age=10,name="Rose"))
}

14Nothing類型

TODO函數的任務就是拋出異常,就是永遠別指望他能運行成功,返回Nothing類型

fun fix(name:String,age:Int = 2){
  println(name+age)
  TODO("nothing")
  println("after nothing.")
}
fun main(){
  println( fix(age=10,name="Rose"))
}

15反引號中的函數名

Kotlin可以使用空格和特殊字符對函數命名,不過函數名要用一對反引號括起來。
爲了支持Kotlin和java交互操作,二Kotlin和java各自卻有着不同的保留關鍵字,不能作爲函數名,使用反引號擴住函數名就能避免任何衝突

fun `**~special function with weird name**`(){
  println("i am weird")
}
fun main(){
  `**~special function with weird name**`()
}

16小結回顧

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章