Kotlin Academy · Oppitunti

Destrukturoivat määritykset componentN-funktioilla

Purkaa data-luokkien instansseja muuttujiksi component-funktioiden avulla.

Oppitunti 3/413 vaihetta

Destrukturoivat määritykset componentN-funktioilla on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 3/4. Voit lukea tästä oppimispolusta kokonaan mitkä tahansa 3 oppituntia ilmaiseksi — sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä käytännön harjoittelun sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Oppitunti kuuluu Kotlin Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.

Hajotelmien perusteet

Hajotelmamääritys purkaa olion useiksi muuttujiksi yhdellä kertaa. Se käyttää componentN()-operaattorifunktioita.

Data-luokan hajottaminen

Data-luokat luovat automaattisesti funktiot component1, component2, ... joten voitte kirjoittaa val (a, b) = obj.

data class Point(val x: Int, val y: Int)
fun main() {
    val p = Point(3, 5)
    val (x, y) = p
    println("x=$x, y=$y")
}

Pair-olion hajottaminen

Vakiokirjaston tyypit Pair ja Triple tukevat hajotelmia suoraan.

fun main() {
    val pair = "Ada" to 35
    val (name, age) = pair
    println("$name is $age")
}

Triple-olion hajottaminen

Triple sisältää kolme arvoa, jotka voidaan hajottaa kolmeksi muuttujaksi.

fun main() {
    val rgb = Triple(255, 128, 0)
    val (r, g, b) = rgb
    println("R=$r G=$g B=$b")
}

Hajotelmat Map-iteraatiossa

Map-alkioilla on avainta vastaava component1 ja arvoa vastaava component2. Hajottakaa alkio for-silmukan otsikossa.

fun main() {
    val ages = mapOf("Alice" to 30, "Bob" to 25)
    for ((name, age) in ages) {
        println("$name -> $age")
    }
}

Hajotelmat lambdoissa

Pair-olioita vastaanottavat lambdat voivat hajottaa parametrit suoraan.

fun main() {
    val pairs = listOf("a" to 1, "b" to 2, "c" to 3)
    pairs.forEach { (letter, num) -> println("$letter=$num") }
}

Arvojen ohittaminen _-merkillä

Ohittakaa tarpeettomat arvot alaviivalla _.

data class User(val name: String, val email: String, val age: Int)
fun main() {
    val u = User("Ada", "ada@example.com", 35)
    val (name, _, age) = u
    println("$name ($age)")
}

Useiden arvojen palauttaminen

Funktio voi palauttaa Pair-olion tai mukautetun data-luokan, jonka kutsuja hajottaa.

data class Result(val sum: Int, val product: Int)
fun computeBoth(a: Int, b: Int) = Result(a + b, a * b)
fun main() {
    val (s, p) = computeBoth(4, 5)
    println("sum=$s product=$p")
}

Mukautettu componentN

Mikä tahansa luokka voi tukea hajotelmia määrittelemällä funktion operator fun componentN().

class RGB(val r: Int, val g: Int, val b: Int) {
    operator fun component1() = r
    operator fun component2() = g
    operator fun component3() = b
}
fun main() {
    val (red, green, blue) = RGB(255, 100, 0)
    println("$red $green $blue")
}

Hajotelmat withIndex()-funktion kanssa

Saakaa iteraation aikana indeksin ja arvon sisältävä Pair-olio käyttämällä withIndex()-funktiota.

fun main() {
    val fruits = listOf("apple", "banana", "cherry")
    for ((idx, fruit) in fruits.withIndex()) {
        println("$idx: $fruit")
    }
}

Rajoitus: sijaintiin perustuva

Hajotelmat perustuvat sijaintiin, eivät nimeen. Data-luokan kenttien järjestyksen muuttaminen muuttaa merkitystä kutsukohdissa huomaamatta.

data class Point(val x: Int, val y: Int)
fun main() {
    val p = Point(10, 20)
    val (a, b) = p // a=x, b=y
    // Add a property in the middle and old destructuring shifts!
    println("$a $b")
}

Pikatarkistus

Mikä operaattorifunktio mahdollistaa i:nnen ominaisuuden hajottamisen?

Kertaus

Hajotelmat käyttävät componentN()-operaattorifunktioita. Data-luokat, Pair, Triple ja Map-alkiot tukevat niitä suoraan. Käyttäkää _-merkkiä arvojen ohittamiseen ja muistakaa, että hajotelmat perustuvat sijaintiin eivätkä nimeen.

Aloita maksutta

Opi Kotlin tekoälytuutorin avulla — ilmaiseksi

Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.

Kurssit
51
Oppitunnit
203

Usein kysytyt kysymykset

Onko oppitunti ”Destrukturoivat määritykset componentN-funktioilla” ilmainen?

Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “Destrukturoivat määritykset componentN-funktioilla”. Sen jälkeen CoddyKit PRO avaa kaikki oppitunnit sekä interaktiiviset harjoitukset sisäänrakennetulla koodieditorilla ja ympäri vuorokauden toimivalla tekoälytuutorilla. Kotlin Academy-kurssilla on yhteensä 4 oppituntia.

Mitä opin oppitunnilla ”Destrukturoivat määritykset componentN-funktioilla”?

Purkaa data-luokkien instansseja muuttujiksi component-funktioiden avulla. Harjoittelet Kotlin Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.

Tarvitsenko kokemusta aloittaakseni Kotlin Academy-opiskelun?

Aiempi kokemus ei ole tarpeen. CoddyKitin Kotlin Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 3/4.

Kuinka kauan ”Destrukturoivat määritykset componentN-funktioilla”-oppitunnin suorittaminen kestää?

Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.

Voinko kirjoittaa ja suorittaa koodia tällä Kotlin Academy-oppitunnilla?

Kyllä. Jokainen Kotlin Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.

Kaikki tämän kurssin oppitunnit

  1. Data-luokkien perusteet: automaattisesti luodut metodit
  2. Kopiointi copy()-funktiolla ja osittaiset ylikirjoitukset
  3. Destrukturoivat määritykset componentN-funktioilla
  4. Data-luokat kokoelmissa ja Map-avaimina
← Takaisin: Kotlin Academy