Koltin資料類之解構申明

2021-08-13 16:24:12 字數 1903 閱讀 2807

所謂的解構宣告就是將乙個物件解構(destructure)為多個變數,也就是意味著乙個解構宣告會一次性建立多個變數.簡單的來說,乙個解構宣告有兩個動作:

宣告了多個變數

將物件的屬性值賦值給相應的變數

例如:

val (name, age) =person
這種語法被稱為解構宣告。解構宣告一次建立多個變數。比如宣告name和age兩個新的變數,可以單獨使用。

println

(name)

println

(age)

解構宣告最終編譯為下面的**:

val name = person.component1()

val age = person.component2()

component1()和component2()函式是kotlin中廣泛使用的慣例原則的例子(如+、* 操作符,for迴圈等)。解構宣告右側能放任意物件,只要可以呼叫所需的元件函式,如元件component3(),component4()等等。componentn()函式需要使用operator操作符標記,可以在解構宣告中使用。

解構宣告同樣可以在for迴圈中使用。

for ((a, b) in collection)
變數a和b為集合中元素component1()和component2()的值。

如果需要乙個函式返回兩個值,如:乙個返回物件和一些排序狀態,kotlin可以通過宣告乙個data類並返回它的例項方式。

ata class result(val result: int , val state: status)

fun function(...): result

// 現在可以使用這個函式了

val (result , status) = function(...)

因為解構宣告自動為data類宣告componentn()函式。

下面示例可能是迭代map的好的方式。例如:

for((key , value ) in map)
想要這樣做,需要:

operator fun  map

.iterator(): iterator> = entryset().iterator()

operator fun map.entry.component1() = getkey()

operator fun map.entry.component2() = getvalue()

因此可以自由在for迴圈中對map使用解構宣告(與data類集合一樣)

如果不需要在解構宣告中使用某個變數,可以使用下劃線來替代。

val

(_, status) = getresult

()

可以在lambda表示式中使用解構宣告,如果lambda中有pair型別引數(或map.entry等提供componentn函式的型別),可以將單獨這個引數在圓括號中進行解構宣告。

map.mapvalues !" }

map.mapvalues

注意宣告兩個引數與乙個引數的解構宣告不同。

// 單個引數

// 兩個引數

// 解構宣告

// 解構宣告和單個引數組合

如果未使用元件某個解構引數,使用下劃線替代屬性名。

map.mapvalues
可以為整個解構引數或單個解構引數指定型別。

map

.mapvalues

map.mapvalues

Kotlin學習之資料類

kotlin學習 經常要建立一些只儲存資料的類。在這些類中,一些標準函式往往是從資料機械推導而來的。在kotlin中,這叫做資料類並標記為data。宣告乙個資料類的語法格式如下 data class 類名 繼承類和實現介面 主建構函式的引數列表必須使用val var宣告為類屬性,而且要求至少有乙個,...

Python 資料型別之Integral型別

python提供了兩種內建的integral型別,即int與bool 整數的大小只受限於機器的記憶體大小 二進位製用0b表示,八進位製用0o表示,十六進製製用0x表示 結果是乙個浮點值,整除 結果是乙個整數,取餘 abs x 返回x的絕對值 divmod x,y x除以y得到商和餘數 兩個整數 po...

PHP常用操作類之通訊資料封裝類的實現

前言 必要性不管在b s架構中,還是c s架構中,兩端的資料通訊 注 這裡的通訊是指的網路請求和回覆操作 都無可避免,因為沒有資料便沒有內容,沒有內容,又有什麼意義 一般來說c s架構通訊執行流程如下 而b s架構通訊執行流程像這樣 選擇既然資料通訊,不可避免,那應該選擇哪種通訊方式比較好呢?目前來...