0Pricing
Android Academy · Ders

Veri Sınıfları ve Mühürlü Sınıflar

Değer tabanlı eşitlik ve copy() için veri sınıflarını, tüm tür hiyerarşileri ve temiz durum modelleme için mühürlü sınıfları kullanın.

Veri Sınıfları ve Mühürlü Sınıflar, CoddyKit'te ücretsiz bir Android Academy dersidir. Bu, 4 dersinin 3. 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, Android Academy öğrenme yolunun bir parçasıdır ve ilerlemeniz web ve CoddyKit uygulaması arasında senkronize olur. Android Academy kursu toplamda 4 dersten oluşur.

Veri Sınıfları Nedir?

Kotlin'de veri sınıfı, temel amacı veri tutmak olan bir sınıftır. Derleyici, sizin için kullanışlı yöntemleri otomatik olarak oluşturur:

  • equals() — iki örneği değere göre karşılaştırır
  • hashCode() — özelliklere dayalı tutarlı karma değeri
  • toString() — okunabilir dize gösterimi
  • copy() — değiştirilmiş bir kopya oluşturur
  • Yapısal açma desteği

Veri Sınıfı Tanımlama

class ifadesinden önce data anahtar sözcüğünü ekleyin. Tüm özellikler birincil oluşturucuda bulunmalıdır:

data class User(val id: Int, val name: String, val email: String)

fun main() {
    val u1 = User(1, "Alice", "alice@example.com")
    val u2 = User(1, "Alice", "alice@example.com")

    println(u1)          // User(id=1, name=Alice, email=alice@example.com)
    println(u1 == u2)    // true  (value equality)
    println(u1 === u2)   // false (different objects)
}

copy() — Bir Alanı Değiştirme

copy(), bazı özellikleri değiştirilmiş yeni bir örnek oluşturur. Özgün örnek değiştirilmez (değişmezlik):

data class Product(val name: String, val price: Double, val inStock: Boolean)

fun main() {
    val original = Product("Laptop", 999.0, true)

    // Only change the price; keep everything else
    val onSale = original.copy(price = 799.0)

    println(original)  // Product(name=Laptop, price=999.0, inStock=true)
    println(onSale)    // Product(name=Laptop, price=799.0, inStock=true)
}

Yapı Bozucu Bildirimler

Veri sınıfları yapı bozmayı destekler — derleyici tarafından oluşturulan componentN() işlevlerini kullanarak özellikleri değişkenlere ayırabilirsiniz:

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

fun main() {
    val point = Point(10, 20)

    // Destructure into separate variables
    val (x, y) = point
    println("x=$x, y=$y")   // x=10, y=20

    // Also works in for loops with maps
    val scores = mapOf("Alice" to 95, "Bob" to 88)
    for ((name, score) in scores) {
        println("$name: $score")
    }
}

Mühürlü Sınıflar Nedir?

Mühürlü sınıf, kısıtlanmış bir sınıf hiyerarşisidir — tüm alt sınıflar aynı dosyada tanımlanmalıdır. Böylece olası türler kümesi derleme zamanında bilinir.

Mühürlü sınıfları ağ sonuçları, kullanıcı arayüzü durumları veya gezinme olayları gibi sonlu bir durum kümesini temsil etmek için kullanın.

Mühürlü Sınıf Söz Dizimi

Alt sınıfları doğrudan sınıfın içinde veya aynı dosyada bildirin:

sealed class NetworkResult<out T> {
    data class Success<T>(val data: T) : NetworkResult<T>()
    data class Error(val message: String, val code: Int = 0) : NetworkResult<Nothing>()
    object Loading : NetworkResult<Nothing>()
}

fun handle(result: NetworkResult<String>) {
    when (result) {
        is NetworkResult.Success -> println("Data: ${result.data}")
        is NetworkResult.Error  -> println("Error ${result.code}: ${result.message}")
        NetworkResult.Loading   -> println("Loading...")
    }
}

Mühürlü Sınıf + when (Eksiksiz)

Mühürlü sınıfların gücü şudur: when ifadesi eksiksizdir. Derleyici, her alt türü ele almanızı zorunlu kılar — hiçbir durum unutulmaz:

sealed class UiState {
    object Loading : UiState()
    data class Success(val message: String) : UiState()
    data class Error(val error: String) : UiState()
}

fun render(state: UiState): String = when (state) {
    is UiState.Loading      -> "Showing spinner"
    is UiState.Success      -> "Show: ${state.message}"
    is UiState.Error        -> "Error: ${state.error}"
    // Compiler error if you remove any branch!
}

fun main() {
    println(render(UiState.Loading))
    println(render(UiState.Success("Loaded!")))
}

Mühürlü Sınıf ve Enum Karşılaştırması

Her ikisi de sabit bir değer kümesini temsil eder, ancak:

  • Enum — her sabit tek bir örnektir; her varyant için ek veri taşımaz
  • Mühürlü sınıf — her varyant farklı veriler taşıyabilir, bir sınıf veya nesne olabilir

Varyantların veri gerektirmediği durumlarda enum kullanın. Varyantların farklı özelliklere ihtiyaç duyduğu durumlarda mühürlü sınıf kullanın.

Nesne Bildirimleri (Tekil Örnekler)

object, tembel oluşturulan ve iş parçacığı açısından güvenli tek bir örnek oluşturur:

object AppConfig {
    const val BASE_URL = "https://api.example.com"
    const val TIMEOUT = 30L

    fun buildUrl(path: String) = "$BASE_URL/$path"
}

fun main() {
    println(AppConfig.BASE_URL)          // https://api.example.com
    println(AppConfig.buildUrl("users")) // https://api.example.com/users
}

Eşlikçi Nesneler

Eşlikçi nesne bir sınıfın içinde bulunur ve sınıf düzeyinde üyeler sağlar (Java'daki static gibi). Genellikle fabrika işlevleri için kullanılır:

class Token private constructor(val value: String) {
    companion object {
        fun create(raw: String): Token {
            val cleaned = raw.trim()
            require(cleaned.isNotEmpty()) { "Token must not be blank" }
            return Token(cleaned)
        }
    }
}

fun main() {
    val token = Token.create("  abc123  ")
    println(token.value)  // abc123
}

Gerçek Bir Uygulamada Veri Sınıfları

Temiz durum modelleme için veri sınıflarını mühürlü sınıflarla birleştirin:

data class Post(val id: Int, val title: String, val body: String)

sealed class PostState {
    object Loading : PostState()
    data class Loaded(val posts: List<Post>) : PostState()
    data class Failed(val reason: String) : PostState()
}

fun showState(state: PostState) = when (state) {
    PostState.Loading        -> println("Fetching posts...")
    is PostState.Loaded      -> println("${state.posts.size} posts loaded")
    is PostState.Failed      -> println("Failed: ${state.reason}")
}

fun main() {
    showState(PostState.Loaded(listOf(
        Post(1, "Hello", "World"),
        Post(2, "Kotlin", "Rocks")
    )))
}

Hızlı Kontrol

Mühürlü sınıfları normal soyut sınıflardan farklı kılan özelliği en iyi açıklayan ifade hangisidir?

Özet: Veri ve Mühürlü Sınıflar

Artık iki güçlü Kotlin aracına sahipsiniz:

  • data class — değere dayalı eşitlik, copy(), yapı bozma ve otomatik oluşturulan toString()
  • sealed class — sonlu tür hiyerarşisi, eksiksiz when ve her varyantın kendi verisini taşıyabilmesi
  • object — tekil örnek; fabrika işlevleri için eşlikçi nesneler

Bu kalıplar birlikte Java'daki gereksiz kodların yerini alır ve temiz, güvenli durum modellemeyi mümkün kılar.

Sıkça Sorulan Sorular

“Veri Sınıfları ve Mühürlü Sınıflar” dersi ücretsiz mi?

Evet — “Veri Sınıfları ve Mühürlü Sınıflar” 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 Android Academy kursunun geri kalanını açmak için CoddyKit PRO'ya yükselt. Android Academy kursu toplamda 4 dersten oluşur.

“Veri Sınıfları ve Mühürlü Sınıflar” dersinde ne öğreneceğim?

Değer tabanlı eşitlik ve copy() için veri sınıflarını, tüm tür hiyerarşileri ve temiz durum modelleme için mühürlü sınıfları kullanın. Android 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.

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

Önceden deneyim gerekmez. CoddyKit'te Android 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 3. dersidir.

“Veri Sınıfları ve Mühürlü Sınıflar” 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 Android Academy dersinde kod yazıp çalıştırabilir miyim?

Evet. Her Android 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. Null Güvenliği
  2. Sınıflar ve Nesneler
  3. Veri Sınıfları ve Mühürlü Sınıflar
  4. Uzantı İşlevleri ve Üst Düzey İşlevler
← Android Academy Sayfasına Dön