KotlinNote-2.Kotlin基礎
- val (value)不可變數。使用val宣告的變數不能在初始化之後再次賦值。它對應的是Java的final變數
- var(variable)可變變數。這種變數的值可以被改變。這種宣告對應著是普通的Java變數
預設情況下,應該儘可能的使用val關鍵字來宣告所有的kotlin變數,僅在必要額時候換成var
1.3.2 字串模版
println("Hello, $name") println("Hello, ${name[0]}")
二、 類和屬性
class Person(val name: String)
在Kotlin中,public是預設的可見性,所以你能省略它
2.1 屬性
在Java中,欄位和其訪問器的組合常常被叫做屬性,而許多框架驗證依賴這個概念。在Kotlin中,屬性是頭等的語言特性,完全代替了欄位和訪問器方法。在類中宣告一個屬性和宣告一個變數一樣:使用val和var關鍵字。宣告成val的屬性是隻讀的,而var屬性是可變的。
2.2 自定義訪問器
假設你宣告這樣一個矩形,它能判斷自己是否是正方形。不需要一個單獨的欄位來儲存這個資訊,因為可以隨時檢查矩形的長寬是否相等來判斷:
class Rectangle(val h: Int,val w: Int){ val isSquare: Boolean get(){ return h = w } }
屬性isSquare不需要欄位來儲存它的值。它只有一個自定義實現的getter。它的值是每次訪問屬性的時候計算出來的。
2.3 目錄和包
三、 列舉和when
3.1 宣告列舉類
enum class Color{ RED,GREEN,YELLOW }
enum class Color(val r: Int,val g: Int, val b: Int){ RED(255,0,0),GREEN(0,255,0),YELLOW(0,0,255) }
列舉常用的宣告構造方法和屬性的語法與之前你看到的常規類一樣
3.2 使用when處理列舉類
fun getMnemonic(color: Color) = when (color) { Color.RED -> print("red") Color.GREEN -> print("green") Color.YELLOW -> print("yellow") }
3.3 在when結構中使用任意物件
Kotlin中的when結構比Java中的switch強大的多,switch要求必須使用常量作為分支條件,和它不一樣,when允許使用任何物件
3.4 使用不帶引數的when
fun mixOptimized(c1: Color,c2: Color) = when{ (c1 == Color.RED && c2 == Color.YELLOW) || (c1 == Color.YELLOW && c2 == Color.RED) -> print("xxx") else -> throw Exception("xxx") } 如果沒有給when表示式提供引數,分支條件就是任意的布林表示式
四、while迴圈和for迴圈
4.1 while迴圈
4.2 迭代數字:區間和數列
在Kotlin中沒有常規的Java for迴圈。在這種迴圈中,先初始化變數,在迴圈的每一步更新它的值,並在值滿足某個限制條件時退出迴圈。為了代替這種常見的迴圈,Kotlin使用了區間的概念。
區間本質上就是兩個值之間的間隔,這兩個值通常是數字:一個起始值。一個結束值,使用..運算子來表示區間
val range = 1..10
注意Kotlin的區間是包含的或者閉合的,意味著第二個值始終是區間的不部分
for(i in 100 downTo 1 step 2)
100 downTo 1是遞減的數列步長為2