0Pricing
Kotlin Academy · Ders

Karşılaştırma İşleçleri

compareTo ve equals

Karşılaştırma İşleçleri, CoddyKit'te ücretsiz bir Kotlin Academy dersidir. Bu, 4 dersinin 2. dersidir. Aşağıdan dersin tamamını ücretsiz okuyabilir, sonra tarayıcıda yerleşik kod editörü ve 7/24 yapay zeka koçu ile uygulamalı olarak pratik yapabilirsin. Bu, Kotlin Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Kotlin Academy kursu toplamda 4 dersten oluşur.

Özel Türleri Karşılaştırma

Türünüz üzerinde <, >, <= ve >= kullanmak için bir Int döndüren operator fun compareTo tanımlayınız.

data class Money(val cents: Int) {
    operator fun compareTo(o: Money) = cents - o.cents
}

fun main() {
    println(Money(500) > Money(200))
}

compareTo Sözleşmesi

compareTo, alıcı daha küçükse negatif bir sayı, eşitse sıfır, daha büyükse pozitif bir sayı döndürür.

data class Version(val n: Int) {
    operator fun compareTo(o: Version) = n - o.n
}

fun main() {
    println(Version(2).compareTo(Version(5)))
}

Comparable Uygulama

Comparable<T> arayüzünü uygulamak deyimsel yaklaşımdır; arayüzün compareTo işlevi zaten bir operatördür.

data class Score(val value: Int) : Comparable<Score> {
    override fun compareTo(other: Score) = value - other.value
}

fun main() {
    println(Score(10) < Score(20))
}

Comparable ile Sıralama

Bir tür Comparable olduğunda sorted() gibi koleksiyon işlevleri otomatik olarak çalışır.

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 })
}

compareValuesBy Kullanma

Birden çok alanı karşılaştırmak için compareValuesBy, her seçiciye sırayla göre karşılaştırma yapar.

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"))
}

equals ile Eşitlik

== operatörü equals işlevini çağırır, compareTo işlevini değil. Değer eşitliğini denetlemek için equals işlevini geçersiz kılınız.

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 ve hashCode Birlikte

equals işlevini geçersiz kılarsanız, eşit nesnelerin aynı özet değerini paylaşması için hashCode işlevini de geçersiz kılmanız gerekir; böylece özete dayalı koleksiyonlar doğru çalışır.

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)
}

Veri Sınıfları Bunu Sizin İçin Yapar

Bir data class, özelliklerinden equals ve hashCode işlevlerini otomatik olarak oluşturur; böylece == değerleri karşılaştırır.

data class Coord(val x: Int, val y: Int)

fun main() {
    println(Coord(1, 2) == Coord(1, 2))
}

Eşitlik ve Kimlik

==, equals işlevini çağırır (değer eşitliği); === ise referans kimliğini denetler. Bu ikisi farklı sonuç verebilir.

data class Box(val n: Int)

fun main() {
    val a = Box(1)
    val b = Box(1)
    println(a == b)
    println(a === b)
}

Koşullarda Karşılaştırma

compareTo tanımlandığında türünüz, sayılar gibi if ve when içinde çalışır.

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 ve minOf

Comparable türler maxOf ve minOf ile çalışır.

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)
}

Hızlı Kontrol

Karşılaştırma operatörleri hakkındaki anlayışınızı kontrol ediniz.

Özet

Karşılaştırma operatörleri hakkında şunları öğrendiniz:

  • compareTo, <, >, <= ve >= işlemlerini destekler ve negatif, sıfır ya da pozitif bir değer döndürür.
  • Deyimsel sıralama ve sıralama işlemleri için Comparable<T> uygulayınız.
  • ==, equals işlevini kullanır; bunu her zaman hashCode ile birlikte uygulayınız.
  • Veri sınıfları equals/hashCode işlevlerini otomatik olarak oluşturur.
data class S(val v: Int) : Comparable<S> {
    override fun compareTo(other: S) = v - other.v
}

fun main() {
    println(S(2) < S(5))
}

Sıkça Sorulan Sorular

“Karşılaştırma İşleçleri” dersi ücretsiz mi?

Evet — “Karşılaştırma İşleçleri” dersin tüm metni burada web'de ücretsiz olarak okunabilir. Etkileşimli olarak pratik yapmak (yerleşik kod editörü ve 7/24 yapay zeka koçu) ve Kotlin Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Kotlin Academy kursu toplamda 4 dersten oluşur.

“Karşılaştırma İşleçleri” dersinde ne öğreneceğim?

compareTo ve equals Kotlin Academy ile uygulamalı kodu tarayıcıda doğrudan çalıştırarak pratik yaparsın ve 7/24 yapay zeka koçu dersi çalışırken sorularını yanıtlar.

Kotlin Academy öğrenmeye başlamak için deneyim gerekli mi?

Önceden deneyim gerekmez. CoddyKit'te Kotlin Academy, başlangıçtan ileri seviyeye kadar yapılandırıldığı için buradan başlayabilir veya başından başlayıp kendi hızında ilerleme yapabilirsin. Bu, 4 dersinin 2. dersidir.

“Karşılaştırma İşleçleri” dersi ne kadar sürer?

Çoğu CoddyKit dersi yaklaşık 5–10 dakika sürer. Her biri kısa ve etkileşimli olduğu için sabit ilerleme yaparsın ve web ile uygulama arasında tam olarak bıraktığın yerden devam edebilirsin.

Bu Kotlin Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Kotlin Academy dersi yerleşik bir kod editörü içerir, bu sayede tarayıcıda gerçek kod yazıp çalıştırabilir ve anlık yapay zeka geri bildirimi alırsın — yerel kurulum gerekli değildir.

Bu kursun tüm dersleri

  1. İşleç İşlevleri
  2. Karşılaştırma İşleçleri
  3. Dizinleme ve Çağırma
  4. En İyi Uygulamalar
← Kotlin Academy Sayfasına Dön