Sammenligningsoperatorer
compareTo og equals
Sammenligningsoperatorer er en gratis leksjon i Kotlin Academy på CoddyKit. Dette er leksjon 2 av 4. Du kan lese valgfritt 3 leksjoner fra denne læringsstien gratis i sin helhet – deretter låser CoddyKit PRO opp alle leksjoner, samt praktisk øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Den er en del av læringsløpet i Kotlin Academy, og fremdriften din synkroniseres mellom nettet og CoddyKit-appen. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
Sammenligne egendefinerte typer
For å bruke <, >, <= og >= på typen Deres må De definere en operator fun compareTo som returnerer en Int.
data class Money(val cents: Int) {
operator fun compareTo(o: Money) = cents - o.cents
}
fun main() {
println(Money(500) > Money(200))
}Kontrakten til compareTo
compareTo returnerer et negativt tall hvis mottakeren er mindre, null hvis de er like, og et positivt tall hvis mottakeren er større.
data class Version(val n: Int) {
operator fun compareTo(o: Version) = n - o.n
}
fun main() {
println(Version(2).compareTo(Version(5)))
}Implementere Comparable
Å implementere grensesnittet Comparable<T> er den idiomatiske fremgangsmåten; dets compareTo er allerede en operator.
data class Score(val value: Int) : Comparable<Score> {
override fun compareTo(other: Score) = value - other.value
}
fun main() {
println(Score(10) < Score(20))
}Sortere med Comparable
Når en type er Comparable, fungerer samlingsfunksjoner som sorted() automatisk.
data class Player(val rank: Int) : Comparable<Player> {
override fun compareTo(other: Player) = rank - other.rank
}
fun main() {
val sorted = listOf(Player(3), Player(1), Player(2)).sorted()
println(sorted.map { it.rank })
}Bruke compareValuesBy
For sammenligninger med flere felt sammenligner compareValuesBy med hver selector i angitt rekkefølge.
data class Person(val age: Int, val name: String) : Comparable<Person> {
override fun compareTo(other: Person) =
compareValuesBy(this, other, { it.age }, { it.name })
}
fun main() {
println(Person(30, "Al") < Person(30, "Bo"))
}Likhet med equals
Operatoren == kaller equals, ikke compareTo. Overstyr equals for å kontrollere verdilikhet.
class Id(val value: Int) {
override fun equals(other: Any?) =
other is Id && other.value == value
override fun hashCode() = value
}
fun main() {
println(Id(7) == Id(7))
}equals og hashCode sammen
Hvis De overstyrer equals, må De også overstyre hashCode, slik at like objekter får samme hashverdi og hash-baserte samlinger forblir korrekte.
class Tag(val name: String) {
override fun equals(other: Any?) = other is Tag && other.name == name
override fun hashCode() = name.hashCode()
}
fun main() {
val set = hashSetOf(Tag("a"), Tag("a"))
println(set.size)
}Data-klasser gjør det for Dem
En data class genererer automatisk equals og hashCode fra egenskapene sine, slik at == sammenligner verdier.
data class Coord(val x: Int, val y: Int)
fun main() {
println(Coord(1, 2) == Coord(1, 2))
}Likhet kontra identitet
== kaller equals (verdilikhet), mens === kontrollerer referanseidentitet. De kan gi ulike resultater.
data class Box(val n: Int)
fun main() {
val a = Box(1)
val b = Box(1)
println(a == b)
println(a === b)
}Sammenligne i betingelser
Når compareTo er definert, fungerer typen Deres i if og when på samme måte som tall.
data class Weight(val g: Int) : Comparable<Weight> {
override fun compareTo(other: Weight) = g - other.g
}
fun main() {
val w = Weight(50)
println(if (w > Weight(40)) "heavy" else "light")
}maxOf og minOf
Comparable-typer fungerer med maxOf og minOf.
data class T(val v: Int) : Comparable<T> {
override fun compareTo(other: T) = v - other.v
}
fun main() {
println(maxOf(T(3), T(8)).v)
}Rask kontroll
Test forståelsen Deres av sammenligningsoperatorer.
Oppsummering
De har lært om sammenligningsoperatorer:
compareToimplementerer<,>,<=og>=, og returnerer negativt, null eller positivt.- Implementer
Comparable<T>for idiomatisk sorteringsrekkefølge og sortering. ==brukerequals; kombiner det alltid medhashCode.- Data-klasser genererer
equals/hashCodeautomatisk.
data class S(val v: Int) : Comparable<S> {
override fun compareTo(other: S) = v - other.v
}
fun main() {
println(S(2) < S(5))
}Lær deg Kotlin med en AI-veileder – gratis
Skriv og kjør ekte kode i nettleseren, få umiddelbar hjelp fra en AI-veileder som er tilgjengelig døgnet rundt, og fortsett der du slapp – på nettet eller i appen.
- Kurs
- 51
- Leksjoner
- 203
Ofte stilte spørsmål
Er leksjonen «Sammenligningsoperatorer» gratis?
Ja – du kan lese valgfritt 3 av leksjonene i læringsstien Kotlin Academy, inkludert «Sammenligningsoperatorer», gratis i sin helhet her på nettet. Deretter låser CoddyKit PRO opp alle leksjoner, samt interaktiv øving med en innebygd kodeeditor og en AI-veileder som er tilgjengelig døgnet rundt. Kurset i Kotlin Academy inneholder totalt 4 leksjoner.
Hva lærer jeg i «Sammenligningsoperatorer»?
compareTo og equals Du øver på Kotlin Academy med praktisk kode som du kjører direkte i nettleseren, mens en AI-veileder som er tilgjengelig døgnet rundt, svarer på spørsmålene dine mens du jobber deg gjennom leksjonen.
Trenger jeg erfaring for å begynne med Kotlin Academy?
Ingen tidligere erfaring er nødvendig. Kotlin Academy på CoddyKit er lagt opp for både nybegynnere og viderekomne, så De kan begynne her eller helt fra start og lære i Deres eget tempo. Dette er leksjon 2 av 4.
Hvor lang tid tar leksjonen «Sammenligningsoperatorer»?
De fleste CoddyKit-leksjoner tar omtrent 5–10 minutter. Hver leksjon er kort og interaktiv, slik at De gjør jevne fremskritt og kan fortsette akkurat der De slapp – både på nettet og i appen.
Kan jeg skrive og kjøre kode i denne Kotlin Academy-leksjonen?
Ja. Alle Kotlin Academy-leksjoner har en innebygd kodeeditor, slik at De kan skrive og kjøre ekte kode direkte i nettleseren og få umiddelbar tilbakemelding fra AI – uten lokal konfigurering.
Alle leksjonene i dette kurset
- Operatorfunksjoner
- Sammenligningsoperatorer
- Indeksering og invoke
- Beste praksis