0Pricing
Kotlin Academy · Pelajaran

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:

  • compareTo mendukung <, >, <=, dan >=, serta mengembalikan nilai negatif, nol, atau positif.
  • Implementasikan Comparable<T> untuk pengurutan dan penyortiran yang sesuai dengan gaya Kotlin.
  • == menggunakan equals; selalu pasangkan dengan hashCode.
  • 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

  1. Fungsi Operator
  2. Operator Perbandingan
  3. Indeks dan Invoke
  4. Praktik Terbaik
← Kembali ke Kotlin Academy