這裡先簡單的說一些Kotlin的習慣用語。
1.資料類
隻儲存資料的類,在 kotlin 中這樣的類稱之為 data 類,用 data 标注:
這裡可以直接省略一對大括号,data類必須要有一個主的構造函數
值得注意的是:
1.主構造函數應該至少有一個參數,否則代碼會直接報錯
2.主構造函數的所有參數必須标注為 val 或者 var (val的話,一旦對參數的值進行了設定,該參數的值就不能再改變了)
3.資料類不能是 abstract,open(可以被繼承的意思),sealed(密封類),或者 inner (内部類)
4.資料類不能繼承其它的類(但可以實作接口)
2.多重聲明
val jane = User("jane", )
val (name, age) = jane
在代碼中對資料類進行多重聲明之後,就可以直接拿name和age來使用了
3.隻讀List
val list = listOf("a","b","c")
listOf會建立一個不可被修改的list,不管前面的接收者是val還var,item的值都不可被改變
沒有傳統的.add方法喲
例如下面的代碼就會報錯(item字樣上飄紅):
for (item in list){
item = "ccc"
}
取值:
list[i] 或者 list.get(i)
推薦使用前者
4.隻讀map
val map = mapOf("a" to , "b" to , "c" to )
參數的前者是key,to後面是value
使用:
map["a"]
5.如果不為空則… 的簡寫
例如:
val list = listOf("a","b","c")
list?.size
第二行中代表的是,傳回當list不為空時,傳回它的size
6.如果不為空…否則… 的簡寫
list?:這是一個可以為null的list,即list可空
?: 是否則的意思,當list不為空時,傳回它的大小,為空時傳回“empty”的字元串
7.利用 with 調用一個對象執行個體的多個方法
class Turtle {
fun penDown()
fun penUp()
fun turn(degrees: Double)
fun forward(pixels: Double)
}
val myTurtle = Turtle()
with(myTurtle) { // 畫一個100像素的正方形
penDown()
for(i in 1..4) {
forward(100.0)
turn(90.0)
}
penUp()
}
這一點我覺得挺好玩的,當想調用一個類的很多方法時,使用with(對象執行個體),就可以在
with的有效範圍内直接調用該類的方法,很便捷
///
接下來簡單的了解一下Kotlin的基本類型
關于數值,在Kotlin中,字元char不是數值類型,用單引号包裹起來
類型 ———字寬 —– 位元組
Double —– 64 ———8
Float ——– 32 ——— 4
Long ——– 64 ———8
Int ———– 32 ——— 4
Short ——- 16 ——– 2
Byte ——— 8 ——— 1
關于比較問題:
val a: Int =
print (a === a ) //列印 'true'
val A: Int? =a
val anotherA: Int? = a
print (A === anotherA ) //注意這裡列印的是 'false'
false的原因是裝箱過的數值是不保留特征的,個人了解是就像對象一樣,這兩個可空的Int值,指向的是兩個不同的位址(=== 表示的判斷比較的兩個值是否是同一個對象)
但是另一方面,它們的值是相等的
關于顯示轉換
val a: Int? = //一個裝箱過的 Int (java.lang.Integer)
val b: Long? = a // 一個隐式裝箱的 Long (java.lang.Long)
print( a == b )
這裡列印出來的是false,Kotlin不支援隐示轉換,需要下面這樣做:
val b: Long? = a!!.toLong()
!! 的意思是傳回a的非空,因為上面的a的類型是Int?,除了是Int,還可以為空
當a非空的前提下,可以顯示的轉換成Long型的值
關于String
Kotlin 有兩種類型的 string :一種是可以帶分割符的,一種是可以包含新行以及任意文本的。帶分割符的 string 很像 java 的 string
整行String 是由三個引号包裹的(“”“),不可以包含分割符但可以包含其它字元
(分隔符可以是空格,逗号,#号等等之類)
val text = """
for (c in "foo")
print(c)
"""