所謂的解構宣告就是將乙個物件解構(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架構通訊執行流程像這樣 選擇既然資料通訊,不可避免,那應該選擇哪種通訊方式比較好呢?目前來...