Operator Perbandingan
compareTo dan equals
Operator Perbandingan adalah pelajaran Kotlin Academy gratis di CoddyKit. Ini adalah pelajaran 2 dari 4. Kamu bisa membaca pelajaran lengkapnya di bawah secara gratis — lalu praktikkan langsung di browser dengan editor kode bawaan dan tutor AI 24/7. Ini adalah bagian dari jalur belajar Kotlin Academy, dan progresmu tersinkronisasi di web dan aplikasi CoddyKit. Kursus Kotlin Academy mencakup 4 pelajaran total.
Membandingkan Tipe Kustom
Untuk menggunakan <, >, <=, dan >= pada tipe Anda, definisikan operator fun compareTo yang mengembalikan Int.
data class Money(val cents: Int) {
operator fun compareTo(o: Money) = cents - o.cents
}
fun main() {
println(Money(500) > Money(200))
}Kontrak compareTo
compareTo mengembalikan bilangan negatif jika penerima lebih kecil, nol jika sama, dan bilangan positif jika lebih besar.
data class Version(val n: Int) {
operator fun compareTo(o: Version) = n - o.n
}
fun main() {
println(Version(2).compareTo(Version(5)))
}Mengimplementasikan Tipe yang Dapat Dibandingkan
Mengimplementasikan antarmuka Comparable<T> adalah pendekatan yang sesuai dengan gaya Kotlin; compareTo di dalamnya sudah menjadi operator.
data class Score(val value: Int) : Comparable<Score> {
override fun compareTo(other: Score) = value - other.value
}
fun main() {
println(Score(10) < Score(20))
}Mengurutkan Tipe yang Dapat Dibandingkan
Setelah sebuah tipe dapat dibandingkan, fungsi koleksi seperti sorted() akan bekerja secara otomatis.
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 })
}Menggunakan compareValuesBy
Untuk perbandingan beberapa bidang, compareValuesBy membandingkan setiap pemilih secara berurutan.
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"))
}Kesetaraan Nilai
Operator == memanggil equals, bukan compareTo. Ganti equals untuk mengatur kesetaraan nilai.
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))
}Memasangkan Pemeriksaan Kesetaraan dan hashCode
Jika Anda mengganti equals, Anda juga harus mengganti hashCode agar objek yang setara memiliki hash yang sama dan koleksi berbasis hash tetap benar.
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)
}Kelas Data Melakukannya untuk Anda
data class secara otomatis menghasilkan equals dan hashCode dari propertinya, sehingga == membandingkan berdasarkan nilai.
data class Coord(val x: Int, val y: Int)
fun main() {
println(Coord(1, 2) == Coord(1, 2))
}Kesetaraan vs Identitas
== memanggil equals (kesetaraan nilai), sedangkan === memeriksa identitas referensi. Keduanya dapat berbeda.
data class Box(val n: Int)
fun main() {
val a = Box(1)
val b = Box(1)
println(a == b)
println(a === b)
}Membandingkan dalam Kondisi
Dengan compareTo yang didefinisikan, tipe Anda dapat digunakan dalam if dan when seperti angka.
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 dan minOf
Tipe yang dapat dibandingkan dapat digunakan dengan maxOf dan 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)
}Pemeriksaan Singkat
Uji pemahaman Anda tentang operator perbandingan.
Rangkuman
Anda telah mempelajari operator perbandingan:
compareTomendukung<,>,<=, dan>=, serta mengembalikan nilai negatif, nol, atau positif.- Implementasikan
Comparable<T>untuk pengurutan dan penyortiran yang sesuai dengan gaya Kotlin. ==menggunakanequals; selalu pasangkan denganhashCode.- Kelas data secara otomatis menghasilkan
equals/hashCode.
data class S(val v: Int) : Comparable<S> {
override fun compareTo(other: S) = v - other.v
}
fun main() {
println(S(2) < S(5))
}Pertanyaan yang Sering Diajukan
Apakah pelajaran “Operator Perbandingan” gratis?
Ya — teks lengkap “Operator Perbandingan” gratis dibaca di sini di web. Untuk praktiknya secara interaktif (editor kode bawaan dan tutor AI 24/7) dan buka sisa kursus Kotlin Academy, upgrade ke CoddyKit PRO. Kursus Kotlin Academy mencakup 4 pelajaran total.
Apa yang akan aku pelajari di “Operator Perbandingan”?
compareTo dan equals Kamu berlatih Kotlin Academy dengan kode praktik yang langsung kamu jalankan di browser, dan tutor AI 24/7 menjawab pertanyaanmu saat kamu mengerjakan pelajaran ini.
Apakah aku perlu pengalaman untuk memulai Kotlin Academy?
Tidak diperlukan pengalaman sebelumnya. Kotlin Academy di CoddyKit dirancang untuk pemula hingga pelajar tingkat lanjut, jadi kamu bisa memulai di sini atau dari awal dan belajar sesuai kecepatan kamu sendiri. Ini adalah pelajaran 2 dari 4.
Berapa lama pelajaran “Operator Perbandingan” memakan waktu?
Sebagian besar pelajaran CoddyKit memakan waktu sekitar 5–10 menit. Setiap pelajaran ringkas dan interaktif, jadi kamu membuat kemajuan stabil dan melanjutkan dari tempat kamu tinggalkan di web dan aplikasi.
Bisakah aku menulis dan menjalankan kode dalam pelajaran Kotlin Academy ini?
Ya. Setiap pelajaran Kotlin Academy menyertakan editor kode bawaan, jadi kamu menulis dan menjalankan kode nyata langsung di browser dan mendapatkan umpan balik AI instan — tidak diperlukan penyiapan lokal.
Semua pelajaran dalam kursus ini
- Fungsi Operator
- Operator Perbandingan
- Indeks dan Invoke
- Praktik Terbaik