CodeBlanks Logo Icon CodeBlanks

equals ve hashCode

equals ve hashCode otomatik üretimini öğrenirsin.

equals otomatik üretim

Data sınıfları, equals metodunu primary constructor parametrelerine göre otomatik üretir. İki örnek, aynı sınıftan ve aynı özellik değerlerine sahipse eşittir.

Örnek: data class Point(val x: Int, val y: Int). Point(1, 2) == Point(1, 2) ifadesi true döner. Bu, normal sınıflarda referans karşılaştırması yapan == işlecinin data sınıflarında içerik karşılaştırması yapmasıdır. equals metodunu kendin yazmana gerek yoktur.

hashCode otomatik üretim

Data sınıfları ayrıca hashCode metodunu da primary constructor parametrelerine göre üretir. Eşit iki örneğin hash kodu da eşittir; bu, HashSet ve HashMap'te tutarlı davranışı sağlar.

Örnek: Point(1, 2).hashCode() == Point(1, 2).hashCode() ifadesi true döner. equals true ise hashCode da aynı olmak zorundadır; data sınıfları bu sözleşmeyi otomatik sağlar. Elle hashCode yazman gerekmez.

Uygulama Point veri sınıfı ile equals kontrolü

Point adında bir veri sınıfı tanımla; primary constructor val x: Int, val y: Int alsın. main içinde Point(1, 2) örneğinden iki tane oluştur (a ve b). Önce a == b sonucunu, sonra a.equals(b) sonucunu println ile yazdır.

Başlangıç kodu

Main.kt
// Point veri sınıfı tanımı
// x ve y özellikleri ile
// main'de iki örnek oluştur
// == ve equals sonuçlarını yazdır

Örnek çözüm

Main.kt
data class Point(val x: Int, val y: Int)

fun main() {
    val a = Point(1, 2)
    val b = Point(1, 2)
    println(a == b)
    println(a.equals(b))
}

Beklenen çıktı

true
true

Soru ve cevaplar

Dersin sorularını cevaplarıyla birlikte inceleyebilirsin. Kendini denemek istersen dersi interaktif olarak çöz.

1 İki <code>Point(1, 2)</code> örneği <code>==</code> ile karşılaştırılıyor. Point bir data class ise sonuç nedir?

Main.kt
In data classes == compares content.
  • false (farklı referanslar)
  • Derleme hatası
  • Çalışma zamanı hatası
  • true (aynı içerik) Doğru cevap

Açıklama: data class == içerik karşılaştırması yapar; aynı değerler true verir.

2 equals karşılaştırmasını tamamla

Soru
val a = Point(1, 2)
val b = Point(1, 2)
println(a ____ b)
Cevap
val a = Point(1, 2)
val b = Point(1, 2)
println(a == b)

Açıklama: == operatörü data sınıflarda equals çağırır.

3 equals ve hashCode kavramlarını eşle

Kavram Anlamı
Point(1,2) == Point(1,2) İçerik eşitliği
equals true ise hashCode Aynı olmak zorunda
normal sınıfta == Referans karşılaştırması
data class equals Otomatik üretilir

Orta seviye bölümündeki tüm dersler