天天看點

我的Kotlin學習之旅 ( 三 )

這裡先簡單的說一些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)
"""