copy ja equals
Automaattisesti luodut funktiot
copy ja equals on ilmainen Kotlin Academy-oppitunti CoddyKitissä. Tämä on oppitunti 2/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.
Automaattisesti luodut funktiot
toString-funktion lisäksi data-luokka luo automaattisesti funktiot equals, hashCode ja copy.
Nämä kolme tekevät data-luokkien vertaamisesta ja kloonaamisesta vaivatonta.
Rakenteellinen yhtäsuuruus
Automaattisesti luotu equals-funktio vertaa olioita niiden ominaisuuksien arvojen, ei identiteetin, perusteella.
Kaksi samanarvoista data-luokan ilmentymää ovat yhtäsuuria operaattorilla ==.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = User("Alice", 30)
println(a == b)
}Eri arvot eivät ole yhtäsuuria
Jos muutatte mitä tahansa ominaisuutta, oliot eivät enää ole yhtäsuuria.
Yhtäsuuruus lasketaan jokaisesta primäärikonstruktorin ominaisuudesta.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = User("Alice", 31)
println(a == b)
}Yhtäsuuruus ja identiteetti
Käyttäkää ==-operaattoria arvojen rakenteelliseen yhtäsuuruuteen ja ===-operaattoria viiteyhtäsuuruuteen eli identiteetin vertailuun.
Kaksi yhtäsuurta data-oliota voi olla muistissa eri ilmentymiä.
data class User(val name: String)
fun main() {
val a = User("Alice")
val b = User("Alice")
println(a == b) // values match
println(a === b) // different instances
}Yhdenmukainen hashCode
hashCode luodaan equals-funktion kanssa yhdenmukaiseksi: yhtäsuurten olioiden tiiviste on sama.
Siksi data-luokat toimivat oikein joukoissa ja map-rakenteiden avaimina.
data class Point(val x: Int, val y: Int)
fun main() {
val a = Point(1, 2)
val b = Point(1, 2)
println(a.hashCode() == b.hashCode())
}copy-funktio
copy luo uuden olion, joka on alkuperäisen kaltainen.
Muuttumattomien val-ominaisuuksien kanssa kopiointi on tapa luoda muokattu versio.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = a.copy()
println(b)
println(a == b)
}Kopiointi muutoksilla
Välittäkää copy-funktiolle nimettyjä argumentteja, jos haluatte muuttaa tiettyjä ominaisuuksia ja säilyttää loput ennallaan.
Tämä on vakiintunut tapa päivittää muuttumatonta dataa.
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val older = a.copy(age = 31)
println(a)
println(older)
}Kopiointi säilyttää alkuperäisen ennallaan
copy ei koskaan muuta lähdeoliota. Alkuperäisen arvot säilyvät.
Tämä muuttumattomuus tekee tilan muutoksista ennakoitavia ja turvallisia.
data class Account(val owner: String, val balance: Int)
fun main() {
val original = Account("Sam", 100)
val updated = original.copy(balance = 150)
println(original.balance)
println(updated.balance)
}Kopioiden ketjuttaminen
Koska copy palauttaa uuden olion, voitte tehdä useita päivityksiä peräkkäin.
Jokainen vaihe tuottaa uuden, itsenäisen arvon.
data class Config(val volume: Int, val muted: Boolean)
fun main() {
val base = Config(50, false)
val result = base.copy(volume = 70).copy(muted = true)
println(result)
}Vain konstruktorin ominaisuudet lasketaan mukaan
Kuten yhtäsuuruuskin, copy käsittelee vain primäärikonstruktorin ominaisuuksia.
Rungon ominaisuudet palautetaan kopiossa oletusarvoihinsa, joten säilyttäkää tärkeä tila konstruktorissa.
data class User(val name: String) {
var note: String = "none"
}
fun main() {
val a = User("Alice")
a.note = "VIP"
val b = a.copy()
println(b.note) // back to default
}Kootaan kokonaisuus
Automaattisesti luodut funktiot antavat data-luokille niiden voiman:
equalsja==vertaavat arvojen perusteellahashCodepysyy yhdenmukaisena equals-funktion kanssacopykloonaa olion ja mahdollistaa valinnaiset muutokset
data class User(val name: String, val age: Int)
fun main() {
val a = User("Alice", 30)
val b = a.copy(name = "Alicia")
println(a == b)
println(b)
}Pikatesti
Testatkaa, miten hyvin ymmärrätte copy- ja equals-funktiot.
Kertaus
Olette oppineet data-luokkien automaattisesti luoduista funktioista:
- equals vertaa arvojen perusteella,
==ja===toimivat eri tavoin - hashCode pysyy kokoelmissa yhdenmukaisena
- copy kloonaa olion valikoiduilla muutoksilla
Seuraavaksi opitte, miten hajotelma purkaa oliot muuttujiksi.
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 ”copy ja equals” ilmainen?
Kyllä — voit lukea täällä verkossa kokonaan ilmaiseksi mitkä tahansa Kotlin Academy-oppimispolun 3 oppituntia, myös oppitunnin “copy ja equals”. 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 ”copy ja equals”?
Automaattisesti luodut funktiot 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 2/4.
Kuinka kauan ”copy ja equals”-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.