首發(fā)于公眾號(hào): DSGtalk1989
21.解構(gòu)聲明
我們可以直接通過(guò)括號(hào)包含變量的方式進(jìn)行數(shù)據(jù)獲取
-
一般使用
比如有個(gè)類
Person
有兩個(gè)屬性name``age
的猛。我們一般的獲取方式是這樣的
class Person{ var name = "1" var age = 4 } fun main() { val person = Person() val name = person.name val age = person.age }
我們白白產(chǎn)生了一個(gè)
person
對(duì)象,造成了浪費(fèi)夭织。這時(shí)候我們就可以使用解構(gòu)聲明需要去重載操作符方法
componentN
,所有componentN
方法指向的就是括號(hào)中從第一個(gè)開始的參數(shù)class Person{ var name = "1" var age = 4 operator fun component1() = name operator fun component2() = age } fun main() { val (a,b) = Person() println(a) println(b) }
-
map使用
在
map
中使用的比較多的解構(gòu)是這樣的for ((key, value) in map) { // 使用 key 和 value 執(zhí)行某種操作 }
-
有些參數(shù)用不到
比如上面的例子立砸,我們只需要用到name之众,而不用age呀页,在kotlin
1.1
之后支持用下劃線略過(guò)不需要使用的參數(shù),類似于lambda中不需要使用到的出參考润。val (_,b) = Person()
-
lambda中的解構(gòu)
從kotlin
1.1
開始支持lambda中有解構(gòu){ a -> ... } // 這里是一個(gè)參數(shù) { a, b -> ... } // 這里是兩個(gè)參數(shù) { (a, b) -> ... } // 這里是將一個(gè)參數(shù)解構(gòu)為兩個(gè)參數(shù) { (a, b), c -> ... } // 這里是將一個(gè)參數(shù)解構(gòu)為兩個(gè)參數(shù), 然后是另一個(gè)參數(shù)
我們針對(duì)上面的
Person
和Map
分別舉例子val personArray = arrayOf(Person()) personArray.filter { (name, age) -> name.startsWith("1") || age > 1 } val map = mapOf("key" to 1, "haha" to 2) map.mapKeys { (key, value) -> println("key : $key value : $value") }
Kotlin學(xué)習(xí)筆記之 1 基礎(chǔ)語(yǔ)法
Kotlin學(xué)習(xí)筆記之 2 基本數(shù)據(jù)類型
Kotlin學(xué)習(xí)筆記之 4 循環(huán)控制
Kotlin學(xué)習(xí)筆記之 5 類和對(duì)象
Kotlin學(xué)習(xí)筆記之 8 擴(kuò)展
Kotlin學(xué)習(xí)筆記之 9 數(shù)據(jù)類與密封類
Kotlin學(xué)習(xí)筆記之 12 對(duì)象表達(dá)式和對(duì)象聲明
Kotlin學(xué)習(xí)筆記之 13 基礎(chǔ)操作符run狭园、with、let糊治、also唱矛、apply
Kotlin學(xué)習(xí)筆記之 14 包與導(dǎo)入
Kotlin學(xué)習(xí)筆記之 15 伴生對(duì)象
Kotlin學(xué)習(xí)筆記之 18 函數(shù)
Kotlin學(xué)習(xí)筆記之 19 高階函數(shù)與 lambda 表達(dá)式
Kotlin學(xué)習(xí)筆記之 20 內(nèi)聯(lián)函數(shù)
Kotlin學(xué)習(xí)筆記之 21 解構(gòu)聲明
Kotlin學(xué)習(xí)筆記之 28 協(xié)程基礎(chǔ)
Kotlin學(xué)習(xí)筆記之 29 上下文與調(diào)度器
Kotlin學(xué)習(xí)筆記之 30 協(xié)程取消與超時(shí)
Kotlin學(xué)習(xí)筆記之 31 協(xié)程掛起函數(shù)的組合