Operadores de comparación
compareTo y equals
Operadores de comparación es una lección gratuita de Kotlin Academy en CoddyKit. Esta es la lección 2 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Kotlin Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Kotlin Academy incluye 4 lecciones en total.
Comparación de tipos personalizados
Para utilizar <, >, <= y >= con su tipo, defina un operator fun compareTo que devuelva un Int.
data class Money(val cents: Int) {
operator fun compareTo(o: Money) = cents - o.cents
}
fun main() {
println(Money(500) > Money(200))
}El contrato de compareTo
compareTo devuelve un número negativo si el receptor es menor, cero si son iguales y un número positivo si es mayor.
data class Version(val n: Int) {
operator fun compareTo(o: Version) = n - o.n
}
fun main() {
println(Version(2).compareTo(Version(5)))
}Implementación de Comparable
Implementar la interfaz Comparable<T> es el enfoque idiomático; su compareTo ya es un operador.
data class Score(val value: Int) : Comparable<Score> {
override fun compareTo(other: Score) = value - other.value
}
fun main() {
println(Score(10) < Score(20))
}Ordenación con Comparable
Una vez que un tipo es Comparable, las funciones de colecciones como sorted() funcionan automáticamente.
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 })
}Uso de compareValuesBy
Para comparaciones con varios campos, compareValuesBy compara según cada selector en orden.
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"))
}Igualdad con equals
El operador == llama a equals, no a compareTo. Sobrescriba equals para controlar la igualdad por valor.
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 y hashCode juntos
Si sobrescribe equals, también debe sobrescribir hashCode para que los objetos iguales compartan un hash y las colecciones basadas en hash sigan siendo correctas.
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)
}Las clases de datos lo hacen por usted
Una data class genera automáticamente equals y hashCode a partir de sus propiedades, por lo que == compara por valor.
data class Coord(val x: Int, val y: Int)
fun main() {
println(Coord(1, 2) == Coord(1, 2))
}Igualdad frente a identidad
== llama a equals (igualdad por valor); === comprueba la identidad de referencia. Pueden dar resultados diferentes.
data class Box(val n: Int)
fun main() {
val a = Box(1)
val b = Box(1)
println(a == b)
println(a === b)
}Comparación en condiciones
Con compareTo definido, su tipo funciona en if y when como los números.
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 y minOf
Los tipos Comparable funcionan con maxOf y 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)
}Comprobación rápida
Compruebe su comprensión de los operadores de comparación.
Resumen
Ha aprendido sobre los operadores de comparación:
compareTorespalda<,>,<=y>=, y devuelve un valor negativo, cero o positivo.- Implemente
Comparable<T>para obtener una ordenación y clasificación idiomáticas. ==utilizaequals; combínelo siempre conhashCode.- Las clases de datos generan
equalsyhashCodeautomáticamente.
data class S(val v: Int) : Comparable<S> {
override fun compareTo(other: S) = v - other.v
}
fun main() {
println(S(2) < S(5))
}Preguntas frecuentes
¿La lección «Operadores de comparación» es gratis?
Sí — el texto completo de «Operadores de comparación» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Kotlin Academy, actualiza a CoddyKit PRO. El curso de Kotlin Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Operadores de comparación»?
compareTo y equals Practicas Kotlin Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Kotlin Academy?
No se requiere experiencia previa. Kotlin Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 2 de 4.
¿Cuánto tiempo toma la lección «Operadores de comparación»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Kotlin Academy?
Sí. Cada lección de Kotlin Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Funciones de operador
- Operadores de comparación
- Indexación e invocación
- Buenas prácticas